相关疑难解决方法(0)

如何在cmake中为不同的编译器应用不同的编译器选项?

我目前正在使用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
Run Code Online (Sandbox Code Playgroud)

这是有效的,但假设除了视觉工作室之外的所有生成器都将使用gcc构建,这显然是不安全的.首先,Borland编译器有IIRC发生器.更重要的是,使用make并不总是意味着使用gcc.

我可能使用的其他编译器是llvm-gcc和clang.幸运的是,我认为即使是clang也支持gcc兼容的选项.但只要相关代码永远不会发布,这种逻辑才有用.

Cmake似乎检查了可用的编译器,并专门为该编译器生成一个makefile(提出问题 - 为什么不至少可以选择直接构建项目,而不需要像make这样的中间人?).

既然如此,我希望能够在我的CMakeLists.txt文件中直接测试gcc.但到目前为止,我找不到合适的变量来测试或任何其他明显的解决方案.

这可能吗?

cmake

24
推荐指数
1
解决办法
6260
查看次数

MacOS,CMake和OpenMP

我使用Homebrew的最新CMake(3.9.3)以及Brew的LLVM 5.0.0,因为Clang在这里有OpenMP支持.

这适用于CMake 3.8.2和LLVM 5.


在我的CMakeLists.txt

find_package( OpenMP )
Run Code Online (Sandbox Code Playgroud)

后来我想做

if( OpenMP_CXX_FOUND )
Run Code Online (Sandbox Code Playgroud)

然而,CMake似乎没有接受该find_package指令.

我用CMake运行

cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_C_COMPILER=clang -DUSE_WERROR=ON
Run Code Online (Sandbox Code Playgroud)

我已经检查过clangclang++正确指向/usr/local/opt/llvm/bin/clang/usr/local/opt/llvm/bin/clang++

我得到的只是这两行:

-- Could NOT find OpenMP_C (missing: OpenMP_C_FLAGS OpenMP_C_LIB_NAMES) (found version "1.0")
-- Could NOT find OpenMP_CXX (missing: OpenMP_CXX_FLAGS OpenMP_CXX_LIB_NAMES) (found version "1.0")
Run Code Online (Sandbox Code Playgroud)

如果我OpenMP_C_FLAGS自己设置(带-DOpenMP_C_FLAGS=-fopenmp=libomp)它会将错误更改为

-- Could NOT find OpenMP_C (missing: OpenMP_C_LIB_NAMES) (found version "3.1")
Run Code Online (Sandbox Code Playgroud)

请注意,它会更改版本号,因此必须找到一些东西,对吗?

我错过了什么才能正常工作?


好吧,似乎在FindOpenMP.cmakeCMake提供的内部我们做了一个try_compile,它默默地失败了(因为我们做了很多次,而且大多数都会失败,这是有道理的).但是,使用Clang时-Werror会提供一个标志,该标志由于未使用的命令行参数而失败.我可以这样补充: …

cmake openmp

9
推荐指数
3
解决办法
8808
查看次数

标签 统计

cmake ×2

openmp ×1