【发布时间】:2019-01-01 19:30:51
【问题描述】:
我正在构建一个静态库并将其链接到我的可执行目标中。该库在真空中构建良好,但是当我尝试从库中包含一个标头时,我得到一个指向静态库依赖项的“没有这样的文件”错误。
我的理解是我的静态库应该私下包含它的依赖项,消费者除了链接库之外不需要做任何事情。这是错的吗?还是我只是不正确地包含了静态库的依赖项?
静态库的 CMakeLists.txt:
# Find SDL2 and associated libs
find_package(SDL2 REQUIRED)
find_package(SDL2_image REQUIRED)
find_package(SDL2_mixer REQUIRED)
find_package(SDL2_ttf REQUIRED)
# Build static library dependency SDL2pp
set(SDL2PP_WITH_IMAGE ON)
set(SDL2PP_WITH_MIXER ON)
set(SDL2PP_WITH_TTF ON)
add_subdirectory("${PROJECT_SOURCE_DIR}/../Libraries/libSDL2pp/"
"${CMAKE_CURRENT_BINARY_DIR}/Libraries/libSDL2pp/")
# Add our static library target
add_library(Framework_Game STATIC
Private/GameManager.cpp
Public/GameManager.h
)
target_include_directories(Framework_Game
PRIVATE
${SDL2_INCLUDE_DIRS} ${SDL2_IMAGE_INCLUDE_DIRS}
${SDL2_MIXER_INCLUDE_DIRS} ${SDL2_TTF_INCLUDE_DIRS}
${SDL2PP_INCLUDE_DIRS}
${CMAKE_CURRENT_SOURCE_DIR}/Private
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/Public
)
target_link_libraries(Framework_Game
PRIVATE
${SDL2_LIBRARIES} ${SDL2_IMAGE_LIBRARIES}
${SDL2_MIXER_INCLUDE_DIRS} ${SDL2_TTF_INCLUDE_DIRS}
${SDL2PP_LIBRARIES}
)
可执行文件的 CMakeLists.txt:
add_executable(NewWorlds Launch.cpp)
target_link_libraries(NewWorlds
PRIVATE
Framework_Game
)
GameManager.h 包含带有#include <SDL2pp/SDL2pp.hh 的 SDL2pp。然后我将它包含在带有#include <GameManager.h> 的Launch.cpp 中,这会给出错误SDL2pp/SDL2pp.hh: No such file or directory
【问题讨论】: