传递依赖和OBJECT库

时间:2017-06-10 01:12:21

标签: cmake

这里有一个类似的问题,Transitive target_include_directories on OBJECT libraries,但没有真正的解决方案。

如果我有一个依赖于项目的项目b,我可以按如下方式构建它们

add_library(a OBJECT ${a_srcs})
add_library(b OBJECT ${b_srcs})

当我想用他们构建一个excutable时,我可以写

add_executable(p ${p_srcs} $<TARGET_OBJECTS:b> $<TARGET_OBJECTS:a>)

有没有办法不必指定$<TARGET_OBJECTS:a>?我认为这意味着以某种方式告诉CMake存在依赖性。如果我正在构建SHARED库而不是OBJECT,那么b项目将包含

target_link_libraries(b a)

创建了这种依赖关系,但我找不到OBJECT库的等效方法。

1 个答案:

答案 0 :(得分:1)

就我所知,在当前设置中,。目标add_executable的{​​{1}}可以

  1. 链接某些(共享或静态)或
  2. 对象源合并到自身。
  3. 你选择了(2)。我在这里看到的唯一其他选项是创建第三个库p,它将ca合并到一个完整的库中(请参阅Usage section at the bottom,这可能是您的位置已经在寻找了。)

    当你这样做时,你可以b。编译后的target_link_libraries(c)无法自行链接。您必须将源合并到可执行文件或库中才能使用它们。

    您的OBJECT来电可以被认为基本上是add_executable,而不是编译add_executable(p ${p_srcs} ${a_srcs} ${b_srcs})a_srcs(之前已经完成),只需复制已编译的对象而不是重做工作。这是一个非常简单/错误的解释,但这是一般的想法。