cmake官方手册
#编译生成可执行文件test
add_executable(test a.cpp b.cpp)
#编译生成静态库liba.a
add_library(liba.a [STATIC] a.cpp b.cpp)
#编译生成动态库liba.so
add_library(liba.so SHARED a.cpp b.cpp)
#编译生成模块archive(注:MODULE不用于链接,而是常像plugin一样运行时加载)
add_library(archive MODULE 7z.cpp)
#设置生成的target的属性
set_target_properties(target1 target2... PROPERTIES
prop1 value1 prop2 value2...)
OUTPUT_NAME:生成的target的名字
#编译此文件需要的cmake最小的版本
cmake_minimum_required(VERSION 3.24)
#定义工程,工程名与target名可以不一样
project(工程名 工程类型) #工程类型有: C CXX CUDA
project(Test CXX)
#打印内容
message("hello world! ${PROJECT_NAME}")
#定义变量或修改变量值
set(变量名 变量值)
set(CMAKE_C_COMPILER /usr/local/bin/gcc) #定义C编译器
set(CMAKE_CXX_COMPILER /usr/local/bin/g++) #定义C++编译器
set(CMAKE_CUDA_COMPILER /usr/local/cuda/bin/nvcc) #设置CUDA编译器
set(CMAKE_CUDA_STANDARD 11) #定义CUDA的C++版本
include_directories(目录) #添加头文件目录
link_directories(目录) #添加库文件目录
#target需要的库文件与头文件所在目录
target_include_directories(target 目录1 目录2)
target_link_directories(target 目录1 目录2)
target_link_libraries(target 库1 库2...)
#将源文件目录下的所有源文件添加到变量里
aux_source_directory(源文件目录 变量)
#添加另一个target到当前target
add_subdirectory(source_dir binary_dir [EXCLUDE_FROM_ALL])
source_dir: 子target的目录(含有CMakeLists.txt)
binary_dir: 子target的输出目录,如果不指明则为source_dir
EXCLUDE_FROM_ALL: 子target不会被编译,除非父target依赖子target
#编译源文件生成可执行文件
#编译源文件生成库文件(SHARED:动态库 STATIC:静态库)
add_library(target 库类型 源文件1 源文件2...)
常用变量
CMAKE_CURRENT_SOURCE_DIR: 当前CMakeLists.txt所在目录
CMAKE_SOURCE_DIR: 最外层CMakeLists.txt所在目录
EXECUTABLE_OUTPUT_PATH: 可执行文件的输出目录
CMAKE_RUNTIME_OUTPUT_DIRECTORY: 可执行文件的输出目录
CMAKE_LIBRARY_OUTPUT_DIRECTORY: 动态库的输出目录
CMAKE_ARCHIVE_OUTPUT_DIRECTORY: 静态库的输出目录