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

时间:2015-01-15 06:29:22

标签: c++ visual-studio gcc cmake

我当前的项目目录看起来像

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是否有可能根据操作系统智能地选择正确的编译器?我应该对CMakeLists做出哪些改变?

如果重要的话,我正在使用像STL和vanilla C ++这样的普通东西(没有os依赖库)。感谢

1 个答案:

答案 0 :(得分:1)

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

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上自动设置。在窗户上,我不知道。但是,您始终可以通过环境变量CCCXX覆盖选定的编译器。这会更改cmake配置。这些更改只会影响新的构建配置。因此,在选择新的编译器之前,不要忘记删除旧的。

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