google 总结的开发规范
cmake 基础语法
-
最低版本
cmake_minimum_required(VERSION 3.1)
-
Project
VERSION 指定版本,并设置一系列变量
DESCRIPTION 项目描述
LANGUAGES 支持C/CXX/Fortran/ASM ,C/C++ 为默认值
-
生成可执行文件
add_executable(Demo demo1.cpp demo2.cpp)
,作用是:指定的源文件来生成目标可执行文件。 -
目录下的所有源文件以列表的形式保存到变量中
aux_source_directory(${PROJECT_SOURCE_DIR}/src SRC_LIST)
add_executable(main ${SRC_LIST})
-
生成库文件
-
库类型包括 STATIC、SHARED、MODULE、OBJECT 等。如果没有指定库类型,那么 BUILD_SHARED_LIBS 的值将决定编译 STATIC 或者 SHARED。
set(BUILD_SHARED_LIBS ON)
add_library(${PROJECT_NAME} ${SRCS_MAIN})
-
ADD_LIBRARY(hello SHARED ${LIBHELLO_SRC})
默认是静态库
-
-
target 生成
由add_library
以及add_executable
来生成的。 -
指定查找头文件的搜索路径
include_directories (${HELLO_SOURCE_DIR}/Hello)
,效果为 增加hello 为 include 目录。默认会在/usr/local/include/
和/usr/include/
中寻找。补充:官网不推荐使用INCLUDE_DIRECTORIEStarget_include_directories()
:指定目标包含的头文件路径。
-
链接库的搜索路径
link_directories(),相当于gcc - L(Library)
参数; 也相当于环境变量中LD_LIBRARY_PATH
的路径的作用。link_directories (${PROJECT_BINARY_DIR}/Hello)
-
target_link_directories(demo /my/libs/dir)
cmake 不鼓励使用 这样使用,建议使用
link_directories
或者target_link_libraries
-
-
给目标文件连接库
target_link_libraries
: 添加链接库,相当于gcc -l
target_link_libraries(demo Hello)
将'可执行文件'与'Hello连接'成'最终'文件demo -
显示定义变量
set(var, [value])
例如:
set(SRC_LIST add.h add.cpp)
set(SRC_LIST ${SRC_LIST} main.cpp)
追加main.cpp -
设置宏定义
预定义宏
add_definitions(-D宏名称)
例如:
add_definitions(-DWINDOWS)
add_definitions(-DLINUX)
-
设置编译选项
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -march=native -O3 -frtti -fpermissive -fexceptions -pthread")
-
预定义的变量
PROJECT_SOURCE_DIR
:我们使用cmake命令后紧跟的目录,一般是工程的根目录;PROJECT_BINARY_DIR
:执行cmake命令的目录,{PROJECT_SOURCE_DIR}/build;CMAKE_CURRENT_LIST_FILE
:输出调用这个变量的CMakeLists.txt的完整路径;CMAKE_CXX_FLAGS
:设置C++编译选项,也可以通过指令ADD_DEFINITIONS()添加;CMAKE_BUILD_TYPE
:build 类型(Debug, Release, …)set(ENV{CMAKE_PATH} "F:/cmake") 将CMAKE_PATH 这个环境变量设为"F:/cmake"
-
编译开关 option
cmake 中的 option 起到编译开关的作用。
-
宏开关
add_definitions()
相当于 C/C++ 里面的 #define 宏定义功能.cmake -DTEST=ON ..
开启宏的开关