Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cmake 可传递依赖项和对象库_Cmake - Fatal编程技术网

Cmake 可传递依赖项和对象库

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>) 它创建了这种依赖关系,但我找不到对象库的等效方法。据我所知,在当前设

这里提出了一个类似的问题,但没有真正的解决办法

如果我有一个依赖于项目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>)

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

据我所知,在当前设置中,。目标
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)