我正在构建一个链接到静态库的库.我正在尝试找出一种方法来传播包含而不是传播静态库的库,当我导出我正在构建的库的目标时.下面是静态库的示例CMakeLists
cmake_minimum_required(VERSION 3.7)
project(mystaticlib)
set(PROJECT_SRCS ${PROJECT_SOURCE_DIR}/src/mystatic.cpp)
set(PROJECT_INCS ${PROJECT_SOURCE_DIR}/include/mystatic.h)
add_library(${PROJECT_NAME} STATIC ${PROJECT_SRCS} ${PROJECT_INCS})
target_include_directories(${PROJECT_NAME} PUBLIC
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_PREFIX}/include>)
export(TARGETS ${PROJECT_NAME}
APPEND FILE ${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}Targets.cmake)
Run Code Online (Sandbox Code Playgroud)
非常标准,没什么特别的,现在这里是我链接到这个静态库的库的CMakeLists
cmake_minimum_required(VERSION 3.7)
project(testlib)
set(PROJECT_SRCS ${PROJECT_SOURCE_DIR}/src/mytest.cpp)
set(PROJECT_INCS ${PROJECT_SOURCE_DIR}/include/mytest.h)
add_library(${PROJECT_NAME} SHARED ${PROJECT_SRCS} ${PROJECT_INCS})
target_include_directories(${PROJECT_NAME} PUBLIC
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_PREFIX}/include>)
target_link_libraries(${PROJECT_NAME} PRIVATE mystaticlib)
# target_link_libraries(${PROJECT_NAME} PUBLIC mystaticlib)
export(TARGETS ${PROJECT_NAME}
APPEND FILE ${CMAKE_BINARY_DIR}/${CMAKE_PROJECT_NAME}Targets.cmake)
Run Code Online (Sandbox Code Playgroud)
target_link_librarieswith 的问题PRIVATE是静态库中的include目录不会被导出.因此,外部用户链接到testlib它将无法找到静态库的标头所在的位置.
target_link_librarieswith 的问题PUBLIC是将静态库暴露给外部用户,这是不希望的.我只希望外部用户能够链接到testlib.
解决这个问题的正确方法是什么?
| 归档时间: |
|
| 查看次数: |
652 次 |
| 最近记录: |