target_link_libraries和target_include_directorie的区别
时间: 2023-10-19 21:15:55 浏览: 237
`target_link_libraries` 和 `target_include_directories` 是 CMake 中用于指定链接库和包含目录的命令。
`target_link_libraries` 用于将库链接到目标文件中,例如:
```cmake
target_link_libraries(my_target PRIVATE my_library)
```
这将在 `my_target` 目标文件中链接 `my_library` 库。可以使用 `PUBLIC` 或 `INTERFACE` 关键字将库链接到目标文件的接口中,以便该库的依赖项也可用于其他目标文件。
`target_include_directories` 用于将包含目录添加到目标文件中,例如:
```cmake
target_include_directories(my_target PRIVATE ${CMAKE_SOURCE_DIR}/include)
```
这将在 `my_target` 目标文件中添加 `CMAKE_SOURCE_DIR/include` 目录作为包含目录。同样可以使用 `PUBLIC` 或 `INTERFACE` 关键字将包含目录添加到目标文件的接口中。
总的来说,`target_link_libraries` 用于指定链接的库,而 `target_include_directories` 用于指定包含的目录。
相关问题
target_link_libraries link_libraries 区别
在CMake中,`target_link_libraries`和`link_libraries都是用于指定目标文件与库文件之间的链接关系的命令,但它们在使用方式和作用范围上有一些区别。
1. `target_link_libraries`命令:
- 使用方式:`target_link_libraries(<target> <PRIVATE|PUBLIC|INTERFACE> <library>)`
- 作用范围:只对指定的目标文件有效。
- 功能:将指定的库文件链接到目标文件中。可以使用`PRIVATE`、`PUBLIC`或`INTERFACE`关键字来指定链接的可见性。
- `PRIVATE`:链接只对当前目标文件有效。
- `PUBLIC`:链接对当前目标文件及其依赖的目标文件都有效。
- `INTERFACE`:链接只对依赖当前目标文件的目标文件有效。
2. `link_libraries`命令:
- 使用方式:`link_libraries(<library>)`
- 作用范围:对整个项目有效,会影响所有的目标文件。
- 功能:将指定的库文件链接到所有目标文件中。
总结:
- `target_link_libraries`命令更加灵活,可以针对不同的目标文件设置不同的链接关系。
- `link_libraries`命令简单易用,但会对整个项目产生影响,可能会导致不必要的链接。
CMake Error at CMakeLists.txt:99 (target_link_libraries): The plain signature for target_link_libraries has already been used with the target "sipManager". All uses of target_link_libraries
这个错误提示表明在 CMakeLists.txt 文件的第 99 行,你尝试使用已经被使用过的 "target_link_libraries" 函数来链接 "sipManager" 目标。这可能是因为你在同一个 CMakeLists.txt 文件中多次调用 "target_link_libraries" 函数来链接同一个目标。你可以通过检查 CMakeLists.txt 文件来找到重复的 "target_link_libraries" 函数,并将它们删除或者合并,使每个目标只链接一次。
阅读全文