Как я могу получить каталог, который содержит исполняемый файл в CMake? - PullRequest
1 голос
/ 21 мая 2019

В зависимости от используемого генератора, 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_DIRECTORY, CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG и целевые свойства RUNTIME_OUTPUT_DIRECTORY, RUNTIME_OUTPUT_DIRECTORY_DEBUG, но они не установлены. Может быть, это не то, что я ищу.

1 Ответ

3 голосов
/ 21 мая 2019

Чтобы указать целевой каталог, связанный с исполняемым целевым объектом с именем 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...