1. CHECK_CXX_COMPILER_FLAG
检查CXX编译器是否支持给定的flag
必须先include(CheckCXXCompilerFlag)
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG(<flag> <var>)
CHECK_CXX_COMPILER_FLAG 赋值给的var是个bool型
例子:
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X)
if(COMPILER_SUPPORTS_CXX11)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
add_definitions(-DCOMPILEDWITHC11)
message(STATUS "Using flag -std=c++11.")
elseif(COMPILER_SUPPORTS_CXX0X)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x")
add_definitions(-DCOMPILEDWITHC0X)
message(STATUS "Using flag -std=c++0x.")
else()
message(FATAL_ERROR "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.")
endif()
2. cmake常用命令
include_directories
指定头文件的搜索路径,相当于指定gcc编译器的-I参数
link_directories
动态链接库或静态链接库的搜索路径,相当于指定gcc的-L参数
add_subdirectory
包含子目录,当工程包含多个子目录时,此命令有用
add_definitions
添加编译参数,比如add_definitions(-DDEBUG)将在gcc命令行添加DEBUG宏定义
add_executable
编译可执行程序
target_link_libraries
指定链接库,相同于指定-l参数
3.cmake 内置变量
CMAKE_C_COMPILER
指定C编译器,通常,CMake运行时能够自动检测C语言编译器。进行嵌入式系统开发时,通常需要设置此变量,指定交叉编译器。
CMAKE_CXX_COMPILER
指定C++编译器
CMAKE_C_FLAGS
指定编译C文件时编译选项,比如-g指定产生调试信息。也可以通过add_definitions命令添加编译选项。
EXECUTABLE_OUTPUT_PATH
指定可执行文件存放的路径。
LIBRARY_OUTPUT_PATH
指定库文件放置的路径
BUILD_SHARED_LIBS
Switch between shared and static libraries
CMAKE_BUILD_TYPE
build 类型(Debug, Release),-DCMAKE_BUILD_TYPE=Debug
内置变量的使用:
在CMakeLists.txt中指定,使用set
cmake命令中使用,如cmake -DBUILD_SHARED_LIBS=OFF