target_include_directories
时间: 2023-08-13 21:03:35 浏览: 33
target_include_directories 是 CMake 的一个命令,用于指定目标文件的头文件目录。使用方法如下:
target_include_directories(<target> [BEFORE|AFTER] [INTERFACE|PUBLIC|PRIVATE]
[item1 [item2 [...]]])
其中,<target> 是目标文件的名称,[BEFORE|AFTER] 指定在其他 include_directories 命令之前或之后执行,[INTERFACE|PUBLIC|PRIVATE] 指定头文件目录的作用域,item1、item2 等则是头文件目录的路径。
相关问题
在cmake中执行target_include_directories(mylib PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include ) target_include_directories(mylib_shared PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include )提醒正确,执行target_include_directories(mylib mylib_shared PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include )时提醒错误 target_include_directories called with invalid arguments
执行 `target_include_directories(mylib mylib_shared PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include)` 时,会出现 "target_include_directories called with invalid arguments" 的错误提示,这是因为 `target_include_directories()` 函数不支持一次为多个目标添加头文件搜索路径。
如果想要为多个目标设置相同的头文件搜索路径,需要分别为每个目标调用 `target_include_directories()` 函数。例如,下面的代码将 `${CMAKE_CURRENT_SOURCE_DIR}/include` 目录添加到 `mylib` 和 `mylib_shared` 两个目标的头文件搜索路径中:
```
target_include_directories(mylib
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/include
)
target_include_directories(mylib_shared
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/include
)
```
这样,这两个目标的依赖项就可以使用这些路径了。
需要注意的是,如果要使用不同的可见性(即 `INTERFACE`、`PUBLIC` 或 `PRIVATE`)为不同的目标添加头文件路径,需要为每个目标分别调用 `target_include_directories()` 函数,并指定相应的可见性。例如:
```
target_include_directories(mylib
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/include
)
target_include_directories(mylib_shared
INTERFACE
/usr/local/include
)
```
这样,`mylib` 目标的头文件路径对其依赖项可见,而 `mylib_shared` 目标的头文件路径对其依赖项不可见,但对其接口(即 `INTERFACE`)可见。
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 则需要在定义目标之后使用。
阅读全文