我正在使用CMake进行中等规模的Fortran项目; 有时我用gfortran构建它,有时用ifort构建它.当我想进行调试构建时,编译器标志是不同的; 我想让CMake自动检查正在使用哪个编译器并相应地设置标志.
看起来这个答案显示了如何为不同的C++编译器做同样的事情.有一个如何使用Fortran检查编译器的示例
if (Fortran_COMPILER_NAME MATCHES "gfortran.*")
Run Code Online (Sandbox Code Playgroud)
但是,这无法调用条件,因为CMake决定使用f95.当然,f95碰巧别名gfortran,但CMake没有检测到.
这样做的正确方法是什么?
您好我想用intel编译器构建一个项目.
使用默认gcc我经常运行:
cmake -DCMAKE_CXX_FLAGS=-I/some/path /path/to/project
Run Code Online (Sandbox Code Playgroud)
这很好用.
cmake -DCMAKE_CXX_COMPILER=icpc -DCMAKE_C_COMPILER=icc -DCMAKE_CXX_FLAGS=-I/some/path /path/to/project
Run Code Online (Sandbox Code Playgroud)
当我尝试使用非默认编译器时,它根本不会将CMAKE_CXX_FLAGS变量内容路径到编译器.
如何解决这个问题?
正确的答案是:
您需要指定CMAKE_CXX_FLAGS变量的类型:
-DCMAKE_CXX_FLAGS:STRING=-I/some/path
Run Code Online (Sandbox Code Playgroud)您需要提供C和C++编译器的完整路径:
cmake -DCMAKE_C_COMPILER=/opt/intel/bin/icc -DCMAKE_CXX_COMPILER=/opt/intel/bin/icpc -DCMAKE_CXX_FLAGS:STRING=-some-flag
Run Code Online (Sandbox Code Playgroud)