我正在構建一個使用CMake的開源項目(kst,v2.0.8)。我使用CMake v2.8.12.2和MSVC 2008作爲編譯器,並生成NMake makefile以在命令行上構建它。我可以通過此設置成功構建它。這些版本是強制性的,所以我目前不能使用CMake或MSVC的更高版本。如何強制cmake使用沒有完整路徑的cl.exe?
我需要能夠執行使用惠普Fortify的KST的源代碼分析,並能夠從它工作在以下兩種方式之一在命令行中使用它:
非接觸模式,它創建它自己的「cl.exe」,在實際cl.exe的路徑之前設置它的路徑,因此在構建期間啓動。
將makefile中的編譯器設置爲Fortify命令行,例如,
sourceanalyzer -b build_id cl
而不是cl
。
無論哪種方式,我需要強制編譯器,cmake生成到其makefiles是cmake不會自動檢測的東西。
我試着按照this question中的相同方法運行cmake時設置編譯器,但cmake仍然堅持把makefile中的MSVC cl.exe的完整路徑。
cmake -DCMAKE_C_COMPILER=cl -DCMAKE_C_COMPILER_FORCED=ON -DCMAKE_CXX_COMPILER=cl -DCMAKE_CXX_COMPILER_FORCED=ON -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=%CFITSIO_DIR% -G"NMake Makefiles" ..\cfit3250
我也嘗試設置編譯調用Fortify的,但是當cmake的測試編譯失敗說,它無法找到編譯器。 (我也試過這種沒有強制= ON參數,並在這種情況下,它說的編譯器失敗。)
cmake -DCMAKE_C_COMPILER="sourceanalyzer -b %BUILDID% cl" -DCMAKE_C_COMPILER_FORCED=ON -DCMAKE_CXX_COMPILER="sourceanalyzer -b %BUILDID% cl" -DCMAKE_CXX_COMPILER_FORCED=ON -DCMAKE_BUILD_TYPE=Debug -DCMAKE_INSTALL_PREFIX=%CFITSIO_DIR% -G"NMake Makefiles" ..\cfit3250
我大概可以搜索並替換在生成文件中的所有編譯器調用,但我必須要記住在每個cmake之後都要這樣做,並且如果有多個項目/ makefiles /調用cl(而不是在makefile中定義CC變量),將會很乏味。我寧願有一種方法讓cmake使用偏移量所需的編譯器。
據我所知,CMake總是傾向於生成具有程序絕對路徑的makefile。至於你的情況,你可以創建**包裝**腳本,並告訴CMake將其用作編譯器。在腳本內部,您可以使用編譯器的相對路徑(通過'PATH'變量分派),或者使用其他機制來選擇實際的編譯器。 – Tsyvarev