语法
target_include_directories(hearDirs) //添加头文件搜索路径
add_executable(exeFileName src1.cpp src2.cpp ....) //指定要生成的可执行文件和其源文件
find_package(BOOST 1.70 REQUIRED) | find_library(varName libName /path/to/xxlib)
//查找cmake的库 find_package(BOOST 1.7.0 REQUIRED PATHS /path/to/boost)
普通库查找find_library(MyLib NAMES mymath PATHS /opt/lib)
target_link_libraries(exeFileName library1 library2 ...) //链接目标文件和其他库
set(varName value) //设置变量 ,使用方式:${varName}
add_library(libname STATIC libsrc1.cpp libsrc2.cpp ....) //创建一个动态SHARED|静态库STATIC 指定包含的源文件
其他
EXECUTABLE_OUTPUT_PATH 二进制可执行文件目录
set(EXECUTABLE_OUTPUT_PATH,${PROJECT_SOURCE_PATH}/bin) //设置exe到bin目录下
PROJECT_SOURCE_PATH 项目根目录
LIBRARY_OUTPUT_PATH 库目录
set(EXECUTABLE_OUTPUT_PATH,${PROJECT_SOURCE_PATH}/libbin) //设置exe到libbin目录下
add_subdirectory(dir) 多个CMakeLists文件情况下,外层文件控制全局,通过该方法控制内层文件运行
./path/to 相对路径是相对该CMakeLists.txt文件而言
Windows端可能需要添加 target_link_libraries(xxx setupapi.lib) 提供相关库来使用函数
实例1(添加库)
cmake_minimum_required(VERSION 3.10)
project(MyProject CXX)
# 查找 Boost 库
find_package(Boost REQUIRED)
# 添加源文件
add_executable(MyExecutable main.cpp)
# 链接 Boost 库
target_link_libraries(MyExecutable Boost::Boost)
实例2(可执行文件使用库)
项目结构图
MyProject/
├── CMakeLists.txt
├── src/
│ ├── main.cpp
│ └── mylib.cpp
└── include/
└── mylib.h
目标:生成一个lib,一个可执行程序(使用该lib)
CMakeLists.txt代码如下
cmake_minimum_required(VERSION 3.10) # 指定最低 CMake 版本
project(MyProject VERSION 1.0) # 定义项目名称和版本
# 设置 C++ 标准为 C++11
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# 添加头文件搜索路径
include_directories(${PROJECT_SOURCE_DIR}/include)
# 添加源文件
add_library(MyLib src/mylib.cpp) # 创建一个库目标 MyLib
add_executable(MyExecutable src/main.cpp) # 创建一个可执行文件目标 MyExecutable
# 链接库到可执行文件
target_link_libraries(MyExecutable MyLib)
实例3(多源文件处理)
cmake_minimum_required(VERSION 3.10) # 指定最低 CMake 版本
project(MyProject VERSION 1.0) # 定义项目名称和版本
# 设置 C++ 标准为 C++11
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
#设置多源文件变量
set(SRC_LIST
./src1.cpp
./src2.cpp
./src3.cpp)
# 添加头文件搜索路径
target_include_directories(MyExecutable ${PROJECT_SOURCE_DIR}/include)
add_executable(MyExecutable ${SRC_LIST})
实例4(生成库)
MyProject/
├── CMakeLists.txt
├── src/
│ └── mylib1.cpp
└── include/
└── mylib.h
cmake_minimum_required (VERSION 3.5)
project (demo)
set (SRC_LIST ${PROJECT_SOURCE_DIR}/src/mylib1.cpp)
add_library (testFunc_shared SHARED ${SRC_LIST})
add_library (testFunc_static STATIC ${SRC_LIST})
set_target_properties (testFunc_shared PROPERTIES OUTPUT_NAME "testFunc")
set_target_properties (testFunc_static PROPERTIES OUTPUT_NAME "testFunc")
set (LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib)
实例5(多module)
MyProject/
├── CMakeLists.txt
├── main/
│ └── CMakeLists.txt
│ └── src
| └──xx.cpp
│ └── include
| └──xx.h
├── fmodule1/
│ └── CMakeLists.txt
│ └── src
| └──func1.cpp
│ └── include
| └──func2.h
└── lib/
└── fmodule1生成的so,a
主CMakeLists.txt
-----------------------------------------------------------
cmake_minimum_required(VERSION 3.10.0)
project(demo5 VERSION 0.1.0 LANGUAGES C CXX)
# add_subdirectory(${PROJECT_SOURCE_DIR}/modulefunc1/)
add_subdirectory(${PROJECT_SOURCE_DIR}/main/)
-----------------------------------------------------------
fmodule1 CMakeLists.txt
----------------------------------------------------------
set(MF1_SRC_LIST
./src/func1.cpp
./src/func2.cpp)
add_library(mfc1 SHARED ${MF1_SRC_LIST})
include_directories( ./include)
set(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/lib/)
----------------------------------------------------------
main CMakeLists.txt
----------------------------------------------------------
set(MAIN_SRC_LIST
./src/main.cpp)
#头文件
include_directories(./include)
include_directories(${PROJECT_SOURCE_DIR}/modulefunc1/include)
#库设置
find_library(LIB_MODULE_FUNC1 NAMES mfc1 PATHS ${PROJECT_SOURCE_DIR}/lib)
add_executable(MM ${MAIN_SRC_LIST})
target_link_libraries(MM ${LIB_MODULE_FUNC1})
----------------------------------------------------------