从其他对象库创建 CMake 对象库(类似于使用 ld 的可重定位输出)

Ami*_*sta 5 c++ cmake

我有以下代码结构

Project->
    project.cxx
    CMakeLists.txt
    meta->
        CMakeLists.txt   
        first->
           first.cxx
           CMakeLists.txt
        second->
           second.cxx
           CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)

其中first/CMakeLists.txt包含:

FILE(GLOB first_sources "*.cxx")
ADD_LIBRARY(first OBJECT ${first_sources})
Run Code Online (Sandbox Code Playgroud)

secondary/CMakeLists.txt 包含:

FILE(GLOB second_sources "*.cxx")
ADD_LIBRARY(second OBJECT ${second_sources})
Run Code Online (Sandbox Code Playgroud)

meta/CMakeLists.txt 包含:

ADD_SUBDIRECTORY(first)
ADD_SUBDIRECTORY(second)
ADD_LIBRARY(meta OBJECT $<TARGET_OBJECTS:first> $<TARGET_OBJECTS:second>)
Run Code Online (Sandbox Code Playgroud)

最后,Project/CMakeLists.txt 包含:

ADD_SUBDIRECTORY(meta)
FILE(GLOB Project_SOURCES "*.cxx")
ADD_LIBRARY(Project SHARED ${Project_SOURCES} $<TARGET_OBJECTS:meta>)
Run Code Online (Sandbox Code Playgroud)

然而,

ADD_LIBRARY(meta OBJECT $<TARGET_OBJECTS:first> $<TARGET_OBJECTS:second>)
Run Code Online (Sandbox Code Playgroud)

由于 OBJECT 库需要 c/cxx 源而不是目标文件,因此失败。

我想要实现的是一个可重定位的目标文件,它将first.o和second.o组合成一个meta.o,如下所示:

ld -r first.o second.o -o meta.o
Run Code Online (Sandbox Code Playgroud)

CMake 的替代方案是什么?