【发布时间】:2019-06-12 18:45:01
【问题描述】:
我正在尝试将多个目标组合成一个目标,因此下游用户只需链接到该单个目标。下游用户不需要查找所有目标,并且上游库中的所有功能都可以通过链接到该单个目标来使用。请参阅下面我失败的尝试的 CMakeLists。
cmake_minimum_required(VERSION 3.11)
project(modules)
# 10 libraries with actually functionality
add_subdirectory(mylib1)
add_subdirectory(mylib2)
...
add_subdirectory(mylib10)
# failed attempt to create a single library that links to the above 10
add_library(myliball)
target_link_libraries(myliball mylib1 mylib2 ... mylib10)
install(TARGETS myliball
EXPORT ${CMAKE_PROJECT_NAME}Targets
ARCHIVE DESTINATION lib
LIBRARY DESTINATION lib
RUNTIME DESTINATION bin)
export(TARGETS myliball
APPEND FILE ${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}Targets.cmake)
当我运行 cmake 时,它会显示此错误
No SOURCES given to target: myliball
我可能可以为 myliball 创建一个空类来解决这个问题,但这似乎很混乱。有没有更好的方法来做到这一点?
【问题讨论】:
-
您可能应该将目标称为“静态库”
-
不,它不仅仅是静态库。 “目标”包括
INTERFACE_COMPILE_DEFINITIONS、INTERFACE_COMPILE_FEATURES、INTERFACE_INCLUDE_DIRECTORIES和INTERFACE_LINK_LIBRARIES等信息 -
@drescherjm 您链接的那个不同,这应该适用于动态库,并且也没有适当的解决方案来解决他们的问题。
-
@Tsyvarev 按照您的建议更新了标题
标签: cmake