Я создаю проект с открытым исходным кодом (kst, v2.0.8), который использует CMake. Я использую CMake v2.8.12.2 и MSVC 2008 в качестве компилятора, и я создаю make-файлы NMake для его создания в командной строке. Я могу получить его для успешного создания этой установки. Эти версии имеют мандат, поэтому я не могу использовать более позднюю версию CMake или MSVC.Как заставить cmake использовать cl.exe без полного пути?
мне нужно, чтобы иметь возможность провести анализ исходного кода KST с помощью компании HP Fortify и иметь возможность использовать его из командной строки, она работает в одном из двух способов:
Бесконтактный режим, где он создает собственный «cl.exe», устанавливает путь к нему до пути к реальному cl.exe и поэтому запускается во время сборки.
Установите компилятор в make-файле в командную строку Fortify, например.
sourceanalyzer -b build_id cl
вместоcl
.
В любом случае мне нужно заставить компилятор, чтобы cmake генерировал в его make-файлы, что-то, что cmake не обнаруживает автоматически.
Я попытался установить компилятор при запуске cmake, следуя тому же методу в this question, но cmake по-прежнему настаивает на том, чтобы поместить полный путь в файл clv.exe MSVC в make-файлах.
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
Я мог бы найти и заменить все вызовы компилятора в Makefiles, но я должен был бы помнить, сделать это после каждого cmake, и было бы скучно видеть, что есть несколько проектов/make-файлов/вызовов cl (а не определение переменной CC в make-файле). Я бы предпочел бы, чтобы cmake использовал желаемый компилятор прямо со смещения.
Насколько я знаю, CMake всегда стремится генерировать make-файлы с абсолютными путями к программам. Что касается вашего случая, вы можете создать ** wrapper ** script и сообщить CMake, чтобы использовать его в качестве компилятора. Внутри скрипта вы можете использовать относительный путь к компилятору (отправка по переменной PATH) или использовать другой механизм для выбора фактического компилятора. – Tsyvarev