target_link_libraries设置PUBLIC还是PRIVATE的策略是
时间: 2023-10-19 10:30:06 浏览: 24
在使用 CMake 构建项目时,target_link_libraries 设置 PUBLIC 还是 PRIVATE 取决于要链接的库对于当前目标的可见性需求。
如果要链接的库对于当前目标的可见性要求是 PUBLIC,那么使用 PUBLIC。这意味着,链接到当前目标的库也可以被链接到当前目标的依赖项所使用。
如果要链接的库对于当前目标的可见性要求是 PRIVATE,那么使用 PRIVATE。这意味着,链接到当前目标的库只能被当前目标自己使用,而不能被链接到当前目标的依赖项所使用。
相关问题
cmakelists 里面 target_link_libraries 的 PUBLIC 和 PRIVATE 有什么区别
在CMake中,target_link_libraries命令用于将一个或多个库链接到一个目标中。当使用PUBLIC或PRIVATE修饰符时,它们会影响链接库的可见性。
- PUBLIC修饰符:链接库将会被添加到目标中,并且同时被传递给依赖该目标的其他目标。也就是说,链接库将会被公开,对于使用该目标的其他目标来说,这个库也是可见的。
- PRIVATE修饰符:链接库将被添加到目标中,但不会被传递给依赖该目标的其他目标。也就是说,链接库只对该目标本身可见。
因此,PUBLIC和PRIVATE修饰符主要用于控制链接库的可见性,以便在构建一个可靠的和可维护的代码库时使用。
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`命令简单易用,但会对整个项目产生影响,可能会导致不必要的链接。