如何从导入的目标中获取源目录?

时间:2018-08-14 19:50:10

标签: cmake

我正在研究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>
)

可以对源目录和安装路径执行类似的操作吗?

0 个答案:

没有答案