CMake ExternalProject_Add 使用自动设置变量

CMake ExternalProject_Add use automatically set variables

根据 documentationExternalProject_Add 自行设置未设置的目录变量。

If any of the above ..._DIR options are not specified, their defaults are computed as follows. If the PREFIX option is given or the EP_PREFIX directory property is set, then an external project is built and installed under the specified prefix:

TMP_DIR      = <prefix>/tmp
STAMP_DIR    = <prefix>/src/<name>-stamp
DOWNLOAD_DIR = <prefix>/src
SOURCE_DIR   = <prefix>/src/<name>
BINARY_DIR   = <prefix>/src/<name>-build
INSTALL_DIR  = <prefix>

在下面的示例中,我想将 COIN-OR-CLP 添加为具有自定义 CONFIGURE_COMMAND 的外部项目,因为 CLP 使用 Autotools。这行得通。

include(ExternalProject)
ExternalProject_Add(${EXT_PROJ}
                    PREFIX ${EXT_PROJ}
                    SVN_REPOSITORY https://projects.coin-or.org/svn/Clp/stable/1.16/
                    UPDATE_COMMAND svn cleanup  # Beause otherwise svn will fail on consecutive runs
                    CONFIGURE_COMMAND ${CMAKE_CURRENT_BINARY_DIR}/${EXT_PROJ}/${EXT_PROJ}/src/${EXT_PROJ}/configure

)

不过我认为使用生成的路径而不是手动传递它会更干净。

有没有办法在 ExternalProject_Add 中使用 ${SOUCRE_DIR} 而无需明确设置?

您引用的所有目录都可以在 ExternalProject_Add 命令中使用 <...> 表示法:

CONFIGURE_COMMAND <SOURCE_DIR>/configure

出于某种原因,此功能在 ExternalProject_Add_Step 函数描述的末尾进行了描述,而不是在函数 ExternalProject_Add 中描述。