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

Configure cmake to choose compiler based on environment

本文关键字:环境 选择 编译器 cmake 配置      更新时间:2023-10-16

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

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 和原版C++(没有依赖操作系统的库)等普通东西。谢谢

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

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将无法正确找到它。