配置cmake以根据环境选择编译器

Configure cmake to choose compiler based on environment

我当前的项目目录是这样的

myproject
/-build
/-include
  /-somefile.h
  /-somefile2.h
/-myproject.cpp
/-CMakeLists.txt

和当前 CMakeLists.txt 看起来像:

cmake_minimum_required (VERSION 3.1)
project (myproject)
add_executable(myproject myproject.cpp)

set(CMAKE_BINARY_DIR ${CMAKE_SOURCE_DIR}/build)
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}) 
set(PROJECT_INCLUDE_DIR ${PROJECT_SOURCE_DIR}/include)

include_directories("${PROJECT_INCLUDE_DIR}")
include_directories("${PROJECT_SOURCE_DIR}")

我想在 x64Windows 和 x64Linux 环境中构建这个项目,同时保留单个 cmake 文件。目前我在 Win 中有 Visual Studio 13 CE,在 Linux 中有 gcc。 Cmake 是否可以根据 OS 智能地选择 ose 正确的编译器?我应该为此对 CMakeLists 进行哪些更改?

如果重要的话,我使用的是普通的东西,比如 STL 和普通 C++(没有 os 依赖库)。谢谢

您想为每个编译器添加条件代码:

if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")

# Set the C++ and linker flags to GCC specifics here.

elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")

# Set the C++ and linker flags to VC++ specifics here.

elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")

# Set the C++ and linker flags to Clang specifics here.

elseif()

至少在 linux 上会自动设置正确的编译器。关于 windows 我不知道。但是,您始终可以通过环境变量 CCCXX 覆盖所选的编译器。这会更改 cmake 配置。这些更改只会影响新的构建配置。所以在选择新的编译器之前不要忘记删除旧的。

编辑:编译器当然必须在您的 PATH 变量中。否则CMake将无法正确找到它。