如何使CMake在系統(tǒng)PATH上使用默認(rèn)編譯器?
問(wèn)題1:
當(dāng)前,我從構(gòu)建目錄中調(diào)用CMake,如下所示::
CXX ="/opt/gcc-4.8/bin/g++" cmake ..
報(bào)錯(cuò)原因:
使CMake使用此特定的編譯器。 否則,它將使用操作系統(tǒng)的默認(rèn)編譯器。
提問(wèn):
我的PATH在所有其他內(nèi)容的前面都有/opt/gcc-4.8/bin
。 因此,除了在環(huán)境變量前添加前綴,還可以在CMakeLists.txt
文件中指定在路徑上使用默認(rèn)g++
的方法嗎?
解答:
(1)手動(dòng)指定編譯目錄:
-D CMAKE_C_COMPILER=/home/gcc7/gcc-7.3.0-install/bin/gcc
-D CMAKE_CXX_COMPILER=/home/gcc7/gcc-7.3.0-install/bin/g++
(2)cmakelist
文件中指定編譯目錄
(3)path
環(huán)境變量指定
// 此方法將環(huán)境變量配置在了PATH的最前面
export PATH=/home/gcc7/gcc-7.3.0-install/bin:$PATH
CMake支持PATH環(huán)境變量的設(shè)置,但優(yōu)先使用通用編譯器名稱cc和c++。 要確定CMake在UNIX下默認(rèn)使用哪個(gè)C編譯器,請(qǐng)運(yùn)行:which cc
要確定默認(rèn)的C ++編譯器,請(qǐng)運(yùn)行:which c++
如果在/opt/gcc-4.8/bin
中生成指向/opt/gcc-4.8/bin/g++
的符號(hào)鏈接c++
,則CMake
默認(rèn)情況下應(yīng)使用GCC 4.8
。
問(wèn)題2:cc
而不是c++
的位置確定將使用哪個(gè)c++
進(jìn)行cmake
。
例:
如果您有/usr/local/bin/c++但cc編譯環(huán)境目錄為/usr/bin/cc
,cmake仍會(huì)拾取/usr/bin/c++
,而不是/usr/local/bin/c++
。
解答:
(1)在這種情況下,在/usr/bin/cc
處創(chuàng)建指向/usr/local/bin/gcc
的符號(hào)鏈接將使cmake
使用/usr/local/bin/c++
。
(2)
另一種方法是將項(xiàng)目的語(yǔ)言顯式設(shè)置為C ++:
project(foo CXX)
(3)
project(foo CXX C)
將優(yōu)先使用C++編譯器來(lái)編譯
問(wèn)題3:
當(dāng)運(yùn)行使用cmake的構(gòu)建腳本時(shí),我在構(gòu)建過(guò)程中得到了以下輸出:
[vcvarsall.bat] Environment initialized for: 'x64'
-- The C compiler identification is MSVC 19.27.29112.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2019/Professional/VC/Tools/MSVC/14.27.29110/bin/Hostx64/x64/cl.exe - skipped
我在另一個(gè)thread中看到這不是一個(gè)錯(cuò)誤,我的代碼繼續(xù)編譯,直到出現(xiàn)不同的錯(cuò)誤,但是為什么輸出會(huì)被“跳過(guò)”而不是“工作”?
解答:
這在較新的CMake版本中是正常的,因?yàn)闀?huì)跳過(guò)測(cè)試,因?yàn)橐阎幾g器可以工作,因?yàn)樗軌虼_定ABI。
請(qǐng)參閱https://gitlab.kitware.com/cmake/cmake/-/merge_requests/4789
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧