【发布时间】:2022-01-21 23:15:54
【问题描述】:
我有两个文件夹,里面有两个不同的库。
- LibBase
- LibPublic
LibB 包含一些 LibBase 的标头。
我希望将 LibPublic 作为静态库,在其 .a 文件中包含“LibBase”。
- 每个 CMakeLists.txt 是:
set(SRCLIB file.cpp)
add_library(${PROJECT_NAME} ${SRCLIB})
add_library(${PROJECT_NAME}::${PROJECT_NAME} ALIAS ${PROJECT_NAME})
target_include_directories(...)
- 顶层 CMakeLists.txt:
add_subdirectory(LibBase)
add_subdirectory(LibPublic)
如何强制 CMake 将 LibBase 包含在 LibPublic 中,以便我只能共享 libLibPublic.a?
LibBase 是专有库,LibPublic 是我们共享的“公共”库。
LibBase 和 LibPublic,两者都可以由其他库或应用程序使用 add_subdirectory() 添加,以便可以提供单个应用程序可执行文件或单个 .a 文件。每个“库”都应该编译为对象、静态库甚至动态库。我希望它们是通用的,上面的 CMakeLists.txt 将决定做什么。
我尝试使用add_library(${PROJECT_NAME}-obj OBJECT ${SRCLIB}),但出现错误:
CMakeLists.txt:22 (target_include_directories):
Cannot specify include directories for target "LibPublic" which is not
built by this project.
【问题讨论】:
-
我认为您将CMake Object libraries 与静态库混为一谈。
-
我不太明白。我不明白为什么我无法为我的简单用例找到正确的答案......为什么 CMake 让事情变得如此复杂。