大纲
前言
本文将介绍 CMake 的常用语法,包括查找源文件、指定输出目录、设置编译参数、链接第三方库等。
查找文件
查找源文件
1 2 3 4 5 6 7 8
| aux_source_directory(src SOURCE_FILES)
file(GLOB SOURCE_FILES "src/*.cpp")
file(GLOB_RECURSE SOURCE_FILES "src/*.cpp")
|
排除指定的文件
1 2 3 4 5
| file(GLOB SOURCE_FILES "src/*.cpp")
list(FILTER SOURCE_FILES EXCLUDE REGEX "example.cpp")
|
输出目录
指定输出目录
1 2 3 4 5
| set(PROJECT_BINARY_DIR ${PROJECT_SOURCE_DIR}/build)
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)
|
编译参数
设置编译参数
1 2 3 4 5 6 7
| set(CMAKE_CXX_COMPILER "clang++") set(CMAKE_CXX_FLAGS "-std=c++11") set(CMAKE_CXX_FLAGS "-g") set(CMAKE_CXX_FLAGS "-Wall") set(CMAKE_CXX_FLAGS_DEBUG "-O0") set(CMAKE_CXX_FLAGS_RELEASE "-O2 -DNDEBUG") set(CMAKE_CXX_FLAGS "-lpthread")
|
设置预处理指令
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| #include <iostream>
using namespace std;
int main() {
#ifdef TARGET cout << "Hello!" << endl; #else cout << "World!" << endl; #endif return 0; }
|
1
| set(CMAKE_CXX_FLAGS "-DTARGET")
|
调试信息
打印日志信息
提示
使用 MESSAGE()
指令可以输出指定的日志信息,例如打印 CMake 变量的值
1 2 3 4 5 6
| FIND_PACKAGE(GTest REQUIRED)
MESSAGE(STATUS "GTEST_INCLUDE_DIRS : " ${GTEST_INCLUDE_DIRS}) MESSAGE(STATUS "GTEST_BOTH_LIBRARIES : " ${GTEST_BOTH_LIBRARIES})
|
链接第三方库
查找并链接系统的第三方库
这里以第三方库 GoogleTest 为例子,其中 GoogleTest 是手动安装到 Linux 系统上的(编译安装或者通过包管理器安装)。
1 2 3 4 5 6 7 8 9
| find_package(GTest REQUIRED)
MESSAGE(STATUS "GTEST_INCLUDE_DIRS : " ${GTEST_INCLUDE_DIRS}) MESSAGE(STATUS "GTEST_BOTH_LIBRARIES : " ${GTEST_BOTH_LIBRARIES})
target_link_libraries(${PROJECT_NAME} ${GTEST_BOTH_LIBRARIES})
|