我正在研究C ++游戏库。游戏库正在从其源代码树中导出软件包,如下所示:
set(GAMELIB_CONFIG_PATH "lib/cmake/gamelib")
# installation target
install(
FILES
"${CMAKE_CURRENT_BINARY_DIR}/${GAMELIB_CONFIG_PATH}/gamelibConfig.cmake"
DESTINATION ${GAMELIB_CONFIG_PATH}
)
install(
EXPORT gamelibTargets FILE gamelibTargets.cmake
NAMESPACE gamelib::
DESTINATION ${GAMELIB_CONFIG_PATH}
)
# export package from build directory
export(
EXPORT gamelibTargets
FILE "${CMAKE_CURRENT_BINARY_DIR}/gamelibTargets.cmake"
NAMESPACE gamelib::
)
export(PACKAGE gamelib)
因此,我有两种选择来使用游戏库:我可以安装游戏库并让其他项目从安装中使用它,或者可以直接从构建的源代码树中导入它,这使得开发很方便引擎,同时还开发游戏。
游戏只是像这样导入包:
find_package(gamelib REQUIRED)
target_link_libraries(game PUBLIC gamelib::gamelib)
这是我的问题:如何获取导入的cmake包的源路径?实际安装软件包时,如何获得不同的路径?我想直接从游戏库中运送预定义资产,而不是将其手动复制到游戏中。游戏将需要从游戏库中读取文件以加载它们。所以我需要在源代码树或已安装路径中的路径。
在导入时,我已经定义了gamelib_DIR
,但这指向二进制目录。
我熟悉生成器表达式以在不同的上下文中设置不同的值:
target_include_directories(gamelib-common INTERFACE
$<INSTALL_INTERFACE:${GAMELIB_INSTALL_INCLUDE_DIR}>
$<BUILD_INTERFACE:${PROJECT_SOURCE_DIR}/include>
)
可以对源目录和安装路径执行类似的操作吗?