CMAKE-目标对象库可能不能链接到任何内容。

5
我使用下面的cMakeLists.txt文件时遇到错误。错误信息如下:

对象库目标“cm”不得链接到任何内容。

问题出在这行代码:target_link_libraries(cm corebase) 该代码可在Linux上成功构建,但在Windows上出现了错误。
请问有什么建议吗?
file(GLOB base
   "*.cpp"
)

file (GLOB model
    "*.cpp"   
)

file(GLOB logger
     "*.cpp"  
)

file(GLOB pass
"*.cpp" 
)

file(GLOB compiler
    "src/compiler/*"
)

add_subdirectory(meta)

if (MSVC)
    add_library(cm OBJECT ${compiler} ${pass})
    add_library(corebase OBJECT ${base} ${logger})
    add_library(model OBJECT ${model})
    target_link_libraries(cm corebase)
    add_dependencies(cm generate-comp-api)
    add_dependencies(model generate-comp-api)
else()
    add_library(cm SHARED ${base} ${logger} ${pass} ${compiler})
    add_library(corebase SHARED ${base} ${logger})
    add_library(model SHARED ${model})
    target_link_libraries(cm corebase metamodel)
    add_dependencies(cm generate-comp-api)
    add_dependencies(model generate-comp-api)
    add_subdirectory(python/api)
    add_subdirectory(tests)
    add_subdirectory(contrib/googletest)
    #add_subdirectory(recordings)
endif(MSVC)
1个回答

2
错误信息是正确的:OBJECT libraries 不应链接到任何内容。相反,需要将与库对应的 目标文件 作为可执行文件/其他库的 源文件 使用:
# Create an OBJECT library
add_library(corebase OBJECT ${base} ${logger})
# And use its objects for other library.
add_library(cm OBJECT ${compiler} ${pass} $<TARGET_OBJECTS:corebase>)

实际上,从 CMake 3.12 开始,也可以将库链接到对象目标。 - juzzlin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接