我需要能够使用HP的Fortify对kst进行源代码分析,并且能够从命令行中使用它,它有两种工作方式:
1.无触摸模式,在此模式下,它会创建自己的"cl.exe",在真正的cl.exe路径之前设置路径,因此在构建期间启动。
2.将编译器设置在makefile中为Fortify命令行,例如
sourceanalyzer -b build_id cl
而不是cl
。无论哪种方式,我都需要强制CMake生成的编译器进入其makefile中,使其成为CMake无法自动检测到的内容。
我尝试了在运行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测试编译器时,它会失败并说找不到编译器。(我也尝试过不使用FORCED=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
我可以在makefile中搜索并替换所有编译器调用,但是每次cmake后都要记得这样做,而且由于存在多个项目/ makefile / 调用cl(而不是在makefile中定义CC变量),这将很繁琐。我更愿意有一种方法从一开始就让cmake使用所需的编译器。
PATH
变量分发),或使用其他机制来选择实际的编译器。 - Tsyvarev