CMake: добавить пользовательскую команду в ExternalProject_Add () - PullRequest
2 голосов
/ 05 марта 2020

Я строю внешний проект, но хочу изменить некоторые файлы перед вызовом configure для него. Это мой текущий CMakeLists.txt:

ExternalProject_Add(
    foo
    URL ${PROJECT_SOURCE_DIR}/ext/foo.tar.gz
    BUILD_IN_SOURCE 1
    #Need copyFromOthers to run here, before configure but after untar
    CONFIGURE_COMMAND ""
    BUILD_COMMAND ""
    INSTALL_COMMAND ""
)

ExternalProject_Add_Step(){
    foo copyFromOthers
    ExternalProject_Get_Property(foo INSTALL_DIR)
    file (COPY <src>/foo_v1.c DESTINATION ${INSTALL_DIR}/foo_v1.c)
    file (COPY <src>/foo_v2.c DESTINATION ${INSTALL_DIR}/foo_v2.c)
##....Continues till foo_v10.c
}

Есть ли способ вызвать пользовательский шаг после команды URL в ExternalProject_Add ()?

Я пытался добавить copyFromOthers в качестве DEPENDEES для ExternalProject_Add () но он продолжал давать мне ошибку о ExternalProject_Get_Property(foo INSTALL_DIR)

1 Ответ

0 голосов
/ 06 марта 2020

Вы можете использовать STEP_TARGETS параметр, подобный этому

ExternalProject_Add(
    foo
    URL ${PROJECT_SOURCE_DIR}/ext/foo.tar.gz
    BUILD_IN_SOURCE 1
    #Need copyFromOthers to run here, before configure but after untar
    CONFIGURE_COMMAND ""
    BUILD_COMMAND ""
    INSTALL_COMMAND ""
    STEP_TARGETS download
)

Затем вы можете использовать целевой "foo-download" в других командах ExternalProject_Add с параметром DEPENDS:

ExternalProject_Add (<some_target_name>
        <...>
        DEPENDS foo-download
        )

Например, вы можете построить внешний проект, который зависит от других внешних проектов. Невозможно использовать зависимости типа «foo-download» для построения целей, определенных с помощью команд, таких как add_executable или add_library, но вы можете использовать «порядковые» цели, определенные ExternalProject_Add (например, «foo») в такие команды:

add_dependencies (some_target foo)

Также вы можете использовать команды ExternalProject_Add_Step для добавления шагов к целям, определенным ExternalProject_Add. См. ВнешнийПроект для получения более подробной информации

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