【发布时间】:2011-03-09 06:12:54
【问题描述】:
我目前正在使用 cmake 构建一些项目,主要平台是 Visual C++、MinGW GCC 和 Linux GCC。使用 GCC 构建时,我需要指定 -Wno-invalid-offsetof 编译器选项。
我目前的修复如下...
if ( "${CMAKE_GENERATOR}" MATCHES "^Visual Studio"
OR "${CMAKE_GENERATOR}" MATCHES "^NMake"
)
set (CPPLIB_COMPILER_OPTS "")
else ()
set (CPPLIB_COMPILER_OPTS "-Wno-invalid-offsetof")
endif ()
...
set_target_properties(sh_core PROPERTIES COMPILE_FLAGS "${CPPLIB_COMPILER_OPTS}")
# repeated for all targets
这是可行的,但假设除 Visual Studio 之外的所有生成器都将使用 gcc 构建显然是不安全的。首先,有用于 Borland 编译器的 IIRC 生成器。更重要的是,使用 make 并不总是意味着使用 gcc。
我可能使用的其他编译器是 llvm-gcc 和 clang。幸运的是,我认为即使 clang 也支持 gcc 兼容选项。但是这个逻辑只有在相关代码不发布的情况下才有用。
Cmake 似乎会检查可用的编译器并专门为该编译器生成一个 makefile(提出一个问题 - 为什么不至少可以选择直接构建项目,而不需要像 make 这样的中间人?)。
既然如此,我希望能够在我的 CMakeLists.txt 文件中直接测试 gcc。不过,到目前为止,我找不到合适的变量来测试或任何其他明显的解决方案。
这可能吗?
【问题讨论】:
标签: cmake