
😈「CSDN主页」:传送门
😈「Bilibil首页」:传送门
😈「本专栏容」:CMake入门教程
😈「动动你的小手」:点赞👍收藏⭐️评论📝
文章目录
- 1. 基本用法
- 2. 添加单个包含目录
- 3. 添加多个包含目录
- 4. 控制包含目录的搜索顺序
- 5. 区分系统头文件和用户头文件
- 6.使用技巧
- 6.1 避免全局设置
- 6.2 使用`target_include_directories`
- 6.3 区分私有和公共包含目录
- 6.4 管理第三方库的包含目录
 
 
CMake的
include_directories命令是用于指定头文件搜索路径的重要工具。在编译C++代码时,正确设置包含目录对于确保编译器能够找到所有必要的头文件至关重要。 
 
1. 基本用法
include_directories命令用于添加包含目录,其基本语法如下:
include_directories([AFTER|BEFORE] [SYSTEM] directory1 [directory2 ...])
- directory1,- directory2, … 是要添加的包含目录。
2. 添加单个包含目录
include_directories(include)
- 这会将项目目录下的include目录添加到包含路径中。
3. 添加多个包含目录
include_directories(include1 include2)
- 这会同时将include1和include2目录添加到包含路径中。
4. 控制包含目录的搜索顺序
include_directories(AFTER include1 BEFORE include2)
- 使用AFTER和BEFORE关键字可以控制包含目录的搜索顺序。在此例中,include1会在include2之后被搜索。
5. 区分系统头文件和用户头文件
include_directories(SYSTEM system_include)
- 使用SYSTEM参数可以将特定目录标记为系统头文件目录,这有助于减少编译器对于系统头文件的警告。
6.使用技巧
6.1 避免全局设置
尽可能避免在项目的根CMakeLists.txt中全局设置包含目录,以防止不同目标间的潜在冲突。
6.2 使用target_include_directories
 
在现代CMake中,推荐使用target_include_directories而不是include_directories:
target_include_directories(my_target PRIVATE include)
- 这将include目录添加到特定目标my_target的私有包含路径。
6.3 区分私有和公共包含目录
对于库目标,使用PRIVATE和PUBLIC关键字区分私有和公共包含目录:
target_include_directories(my_library PUBLIC include_public)
target_include_directories(my_library PRIVATE include_private)
- PUBLIC包含目录会被库的使用者继承,而- PRIVATE包含目录仅用于库本身的构建。
6.4 管理第三方库的包含目录
使用find_package或pkg_check_modules来管理第三方库,并使用其提供的包含目录:
find_package(Boost REQUIRED)
target_include_directories(my_target PRIVATE ${Boost_INCLUDE_DIRS})
- 这样可以确保第三方库的包含目录被正确添加。
通过这些方法,您可以有效地管理和优化CMake项目中的包含目录,确保构建系统的可维护性和可移植性。