我当前的项目目录看起来像
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依赖库)。感谢
答案 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上自动设置。在窗户上,我不知道。但是,您始终可以通过环境变量CC
和CXX
覆盖选定的编译器。这会更改cmake配置。这些更改只会影响新的构建配置。因此,在选择新的编译器之前,不要忘记删除旧的。
编辑:编译器当然必须在PATH
变量中。否则CMake将无法正确找到它。