include_directories 和 target_include_directories
时间: 2023-12-29 11:52:25 浏览: 70
include_directories和target_include_directories都是用来设置头文件搜索路径的CMake命令。
include_directories命令将指定的目录添加到当前目录和其子目录的头文件搜索路径中。例如:
```
include_directories(include)
```
这将把include目录添加到搜索路径中。
target_include_directories命令将指定的目录添加到指定目标的头文件搜索路径中。例如:
```
target_include_directories(my_target PUBLIC include)
```
这将把include目录添加到my_target目标的头文件搜索路径中。
在使用CMake构建C/C++项目时,推荐使用target_include_directories命令来设置头文件搜索路径,因为它可以更精确地控制目标的头文件搜索路径。
相关问题
include_directories和target_include_directorie两者的区别
`include_directories` 和 `target_include_directories` 都是用于指定头文件的搜索路径,但是它们的作用范围不同。
`include_directories` 是用来指定全局的头文件搜索路径,它会影响到所有的目标(包括库和可执行文件)。它的语法如下:
```cmake
include_directories([AFTER|BEFORE] [SYSTEM] dir1 [dir2 ...])
```
其中 `AFTER|BEFORE` 表示添加路径的位置,`SYSTEM` 表示将路径视为系统路径(此时会禁用一些警告),`dir1`、`dir2` 等表示需要添加的路径。
而 `target_include_directories` 则是在目标级别上指定头文件搜索路径,它只会影响到当前目标。它的语法如下:
```cmake
target_include_directories(target-name [SYSTEM] [BEFORE|AFTER]
<INTERFACE|PUBLIC|PRIVATE> [items1...])
```
其中 `target-name` 表示目标名称,`SYSTEM` 和 `BEFORE|AFTER` 的含义同上,`INTERFACE|PUBLIC|PRIVATE` 则表示不同作用域。`INTERFACE` 表示只会影响到当前目标的依赖项,`PUBLIC` 则表示会影响到当前目标和依赖它的目标,`PRIVATE` 则表示只会影响到当前目标本身。
总之,`include_directories` 是全局的设置,而 `target_include_directories` 则是在目标级别上设置的,作用范围更加精细。
include_directories target_include_directories
include_directories 和 target_include_directories 都是 CMake 中用来添加头文件搜索路径的命令。
include_directories 是一个全局命令,用于将指定的目录添加到整个项目的头文件搜索路径中。这意味着在项目的任何地方都可以使用这些头文件,而不需要显式地指定路径。
target_include_directories 则是一个针对特定目标的命令,用于将指定的目录添加到特定目标的头文件搜索路径中。这意味着只有特定目标可以使用这些头文件。
两个命令的用法类似,都需要指定目录路径作为参数。例如:
```cmake
include_directories(path/to/directory)
```
```cmake
target_include_directories(my_target PUBLIC path/to/directory)
```
其中,include_directories 可以在 CMakeLists.txt 的任何位置使用,而 target_include_directories 则需要在定义目标之后使用。
阅读全文