Cmake 可传递依赖项和对象库
这里提出了一个类似的问题,但没有真正的解决办法 如果我有一个依赖于项目a的项目b,我可以如下构建它们Cmake 可传递依赖项和对象库,cmake,Cmake,这里提出了一个类似的问题,但没有真正的解决办法 如果我有一个依赖于项目a的项目b,我可以如下构建它们 add_library(a OBJECT ${a_srcs}) add_library(b OBJECT ${b_srcs}) 当我想建立一个合理的使用他们我可以写 add_executable(p ${p_srcs} $<TARGET_OBJECTS:b> $<TARGET_OBJECTS:a>) 它创建了这种依赖关系,但我找不到对象库的等效方法。据我所知,在当前设
add_library(a OBJECT ${a_srcs})
add_library(b OBJECT ${b_srcs})
当我想建立一个合理的使用他们我可以写
add_executable(p ${p_srcs} $<TARGET_OBJECTS:b> $<TARGET_OBJECTS:a>)
它创建了这种依赖关系,但我找不到对象库的等效方法。据我所知,在当前设置中,否。目标
p
的add_可执行文件可以是
链接到某个库(共享或静态),或
将对象源合并到自身中
您选择了(2)。我在这里看到的另一个选择是创建第三个库c
,它将a
和b
合并到一个完整的库中(请参阅,这可能是您已经看到的)
当您这样做时,您就可以目标链接库(c)
。编译的对象
s不能单独链接。您必须将源代码合并到可执行文件或库中才能使用它们
您的add_executable
调用基本上可以考虑执行add_executable(p${p_srcs}${a_srcs}${b_srcs})
,而不是编译a_srcs
和b_srcs
,只需复制已编译的对象,而不是重做工作。这是一个非常简单/糟糕的解释,但这只是一般的想法
target_link_libraries(b a)