1
wutiantong 2020-09-16 16:32:05 +08:00 1
建议了解一下动态链接库和静态链接库的区别。
|
2
Huelse 2020-09-16 16:39:07 +08:00 1
不知道你在说什么,动态库只有程序运行时被调用,静态库在编译时被包含。
|
3
stebest OP @Huelse 就是以前的代码生成的库,如果是动态的,然后你编译的时候需要调用,同时包含其头文件。然后生成的库被别人调用的时候也还是要包含你之前包含的头文件和链接库么?
|
5
EggtartZ 2020-09-16 17:06:51 +08:00 1
target_link_libraries 可以设置成 PRIVATE
|
6
cnt2ex 2020-10-09 00:51:40 +08:00 1
根据你 A.so 的接口(头文件里)是不是也暴露了 B.so 的东西而定。如果你 A 暴露了 B 的东西,新的库 C 连接 A 的时候是需要知道哪里去找 B 的那部分东西的,这时就得给 C 指定 B ( https://cmake.org/pipermail/cmake/2016-May/063400.html )
cmake 里有 public 、private 、interface 这几个东西可以帮你处理这种依赖 如果 A 暴露了 B 的话,你 target_link_libraries 的时候把 B.so 的依赖设为 PUBLIC: target_link_libraries(A PUBLIC B) 如果不是的话,设置为 PRIVATE 。 当设置成 PUBLIC 之后,新的 C 连接 A 的时候,cmake 会把 A 的依赖传给 C,你就不需要额外给 C 设置 target_link_libraries 到 B 了( https://cmake.org/cmake/help/latest/manual/cmake-buildsystem.7.html#transitive-usage-requirements ) 不过如果你的 A.so 不是 cmake 生成,而是外面导入的话,还是得手动设置这种依赖。 |