我正在构建一个使用 CMake 的开源项目(kst,v2.0.8)。我正在使用 CMake v2.8.12.2 和 MSVC 2008 作为编译器,并且正在生成 NMake makefile 以在命令行上构建它。我可以通过此设置成功构建它。这些版本是强制性的,因此我目前无法使用更高版本的 CMake 或 MSVC。
我需要能够使用 HP 的 Fortify 执行 kst 的源代码分析,并能够从命令行使用它,它以两种方式之一工作:
它创建自己的“cl.exe”的非接触模式,在真正的 cl.exe 路径之前设置它的路径,因此在构建期间启动。
将 makefile 中的编译器设置为 Fortify 命令行,例如,
sourceanalyzer -b build_id cl
而不是cl
.
无论哪种方式,我都需要强制 cmake 在其 makefile 中生成的编译器成为 cmake 不会自动检测到的东西。
我已经尝试在按照这个问题中的相同方法运行 cmake 时设置编译器,但 cmake 仍然坚持将 MSVC cl.exe 的完整路径放在 makefile 中。
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 的调用(而不是定义 CC)会很乏味makefile 中的变量)。我宁愿有办法让 cmake 从偏移量中使用所需的编译器。