😈「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项目中的包含目录,确保构建系统的可维护性和可移植性。