编译代码
- 在项目根目录下创建一个名为CMakeLists.txt的文件
- 指定cmake所需最低版本,如果使用的CMake版本低于该版本,则会发出致命错误
cmake_minimum_required(VERSION 3.20 FATAL_ERROR)
- 声明项目名称和支持的编程语言(必须)
project(cplusplus_test LANGUAGES CXX)
- 设置语言标准(可选)
set(CMAKE_CXX_STANDARD 20) # 设置这一项可以替代set(CMAKE_CXX_FLAGS "-std=c++20")
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS ON)
- 设置编译类型(可选),默认可能为空,也有可能是其他
set(CMAKE_BUILD_TYPE "Debug")
- 使用set设置一些自定义变量或cmake变量(可选)
- 指示CMake创建一个或多个新目标:可执行文件或动态/静态库
add_library() # 构建库
add_executable() # 构建可执行文件
- 如果目标文件有要包含的头文件目录,则将头文件的目录添加到目标文件
target_include_directories(<target> <PRIVATE|PUBLIC|INTERFACE> <header_dir>)
- 如果目标文件有较多的源代码文件(.cpp等),需要添加到目标文件
target_sources(<target> <PRIVATE|PUBLIC|INTERFACE> <src_dir>)
- 如果目标文件有依赖,则将依赖库链接到目标文件,库文件可以省略前缀lib和后缀.so或.a
target_link_libraries(<target> <PRIVATE|PUBLIC|INTERFACE> <lib_name>)
安装代码
install()
测试代码
构建
- 创建build目录,在build目录下生成一堆文件
mkdir -p build
cd build ; cmake ..
# 或者通过以下方式代替上面的两步:
cmake -H. -Bbuild
# 开始编译
cmake --build . # 或者可以直接 make
多级目录
多级目录下创建CMake,主目录下和各子目录下创建CMakeLists.txt文件
- 主目录CMake必需指令为上述步骤中的2,3,4,5,另外可以使用步骤6创建一些子目录用到的变量。
- 使用
add_subdirectory
包含子目录下的CMakeLists.txt - 子目录下的CMakeLists.txt可以不需要2,3
其他无差别
简单模板
cmake_minimum_required(VERSION 3.20)
project(my_grpc_demo LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 14)
# 根据需要,设置成"Debug"或"Release"
set(CMAKE_BUILD_TYPE "Debug")
add_executable(my_grpc_demo)
# 这里写上依赖的gRPC和自己的头文件路径
set(HEADER_DIR "/home/iLearning/code/gtest/gtest_1.13.0/x86_64/include/")
target_include_directories(
my_grpc_demo
PUBLIC
${HEADER_DIR}
)
# 这里写上依赖的so的路径
set(LIBRARY_DIR "/home/iLearning/code/gtest/gtest_1.13.0/x86_64/lib/libgtest.a")
target_link_libraries(
my_grpc_demo
PUBLIC
${LIBRARY_DIR}
)
# 这里是你自己的cpp文件
file(GLOB CPP_FILE /home/iLearning/code/CMake/practice/*.cpp)
target_sources(
my_grpc_demo
PUBLIC
${CPP_FILE}
)