如何获取包含CMake中的可执行文件的目录?

时间:2019-05-21 02:59:08

标签: cmake

根据使用的生成器,CMAKE_CURRENT_BINARY_DIR可能包含可执行文件,也可能不包含可执行文件。使用Unix Makefiles生成器,将可执行文件直接放置到该目录中。但是,使用Xcode生成器,可执行文件位于子目录(Debug或Release)中。

我正在尝试将一些文件复制到可执行文件旁边的目录中。这就是我正在做的事情,但仅在我使用make时有效。也许有更好的方法?

add_custom_command(
    TARGET Game POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy_directory
        ${CMAKE_CURRENT_SOURCE_DIR}/assets
        ${CMAKE_CURRENT_BINARY_DIR}/assets
)

我找到了CMAKE_RUNTIME_OUTPUT_DIRECTORY_<CONFIG>,但似乎没有设置。我尝试了CMAKE_RUNTIME_OUTPUT_DIRECTORYCMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG和目标属性RUNTIME_OUTPUT_DIRECTORYRUNTIME_OUTPUT_DIRECTORY_DEBUG,但未设置它们。也许这不是我想要的。

1 个答案:

答案 0 :(得分:3)

要指定与名为name_of_executable_target的可执行目标相关联的目标目录,请考虑使用$<TARGET_FILE_DIR:name_of_executable_target>生成器表达式。

add_custom_command(
    TARGET Game POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E make_directory
        $<TARGET_FILE_DIR:name_of_executable_target>/assets
    COMMAND ${CMAKE_COMMAND} -E copy_directory
        ${CMAKE_CURRENT_SOURCE_DIR}/assets
        $<TARGET_FILE_DIR:name_of_executable_target>/assets
    )

有关更多详细信息,请参见https://cmake.org/cmake/help/latest/manual/cmake-generator-expressions.7.html