cmake_minimum_required(version) :指定cmake工具的最低版本
include_directories(dir):-I指定的头文件路径
link_directories(dir):-L包含的库文件路径
PROJECT(name):项目命名
add_subdirectory(math):指明本项目包含一个子目录 math,这样 math 目录下的 CMakeLists.txt 文件和源代码也会被处理 ;
LIBRARY_OUTPUT_PATH:库生成的输出目录
EXECUTABLE_OUTPUT_PATH:可执行文件生成的输出目录
aux_source_directory(dir var):将dir目录下所有文件自动存储到var变量中
add_library(name SHARE source_set):用source_set变量包含的所有文件集合生成libname.so共享库
add_library(name STATIC source_set):用source_set变量包含的所有文件集合生成libname.a静态库
add_executable(name source_set):用source_set变量包含的所有文件集合生成可执行文件name
target_link_libraries(name lib_set):指定通过add_executable或者add_library生成name目标时去链接的库集合
install(TARGETS name_set DESTINATION dir):将name_set目标集合全部安装到dir目录
SET(var value_set):设置var的值为value_set包含的值得集合
if(DEFINE XXXX) {}elseif(){}else{}endif():判断XXX是否被定义的条件选择逻辑
if(A_XXX STREQUAL B_XXX):判断A_XXX与B_XXX字符串是否相等
CMAKE_INSTALL_PREFIX #make install 的安装路径
CMAKE_BUILD_TYPE #生成的目标为debug或者release
CMAKE_C_FLAGS_DEBUG:debug模式下增加的c编译参数
CMAKE_C_FLAGS_RELEASE:release模式下增加的c编译参数
CMAKE_CXX_FLAGS_DEBUG:debug模式下增加的c++编译参数
CMAKE_CXX_FLAGS_RELEASE:release模式下增加的c++编译参数
CMAKE_C_FLAGS #gcc 的编译参数指定,这个非常好用,一般通过set 修改其值
CMAKE_CXX_FLAGS #g++ 和上面CMAKE_C_FLAGS 类似
CMAKE_CURRENT_SOURCE_DIR # 当前CMakeLists.txt所在的目录,主要用来定位某文件
CMAKE_CURRENT_BINARY_DIR # 当前CMakeLists.txt对应的编译时的目录
CMAKE_C_COMPILER #C编译器
CMAKE_CXX_COMPILER #C++编译器
---------------------检查编译器是否支持xxx特性(如c++版本类型)----------------------------------
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPLILER_SUPPORT_CXX11)
CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPLILER_SUPPORT_CXX0X)
if(COMPILER_SUPPORT_CXX11)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -ldl")
elseif(COMPILER_SUPPORT_CXX0X)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x -ldl")
endif()
-------------------------------------------------------------------------------------------------------------------
message(STATUS "str"):输出str字串
注意事项:
1.CMAKE的命令是不区分大小的,变量时区分大小写的
2.CMake命令执行时,用-D定义的变量可以在CMakeList.txt中检测到,常常用来在编译时指定一
些必要条件;
3.CMake执行时,可以用-D指定CMakeList中(即CMake)的内部变量值,在CMakeList.txt中也
能被检测到;