1

考虑以下情况:我想通过ExternalProject_Add. 我想构建发布和调试库。我的计划是先构建发布库,然后重用下载的源代码来构建调试库。我不想下载源代码两次。我的 CMakeLists.txt 中的相关部分如下所示:

ExternalProject_Add(
installSFMLRelease
            PREFIX ${TMPDIR}
            DOWNLOAD_DIR ${TMPDIR}/SFML
            GIT_REPOSITORY git://github.com/LaurentGomila/SFML.git
            GIT_TAG 2.0
            CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${SFML_INSTALL_PREFIX}
            CMAKE_GENERATOR ${CMAKE_GENERATOR}
            UPDATE_COMMAND "")

ExternalProject_Add(
installSFMLDebugAndDocs
            DEPENDS installSFMLRelease
            URL file://${TMPDIR}/SFML
            SOURCE_DIR ${TMPDIR}/SFML
            CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${SFML_INSTALL_PREFIX} -DCMAKE_BUILD_TYPE:STRING=Debug -DSFML_BUILD_DOC:BOOL=TRUE)               

你猜怎么着?它不起作用。CMake 失败

3>CUSTOMBUILD : CMake error : The source directory "C:/Windows/Temp/SFML" does not appear to contain CMakeLists.txt.

这里的问题是,该目录实际上不包含任何内容,因为installSFMLRelease之前没有运行过。我怎样才能得到DEPENDS正确的 - 部分?

4

2 回答 2

0

首先,我不确定您的目标是否会在这里实现。如果您在调试模式下从 MSVC 构建 installSFMLRelease,那么您将获得一个调试版本。对于 installSFMLDebugAndDocs 的发布版本,反之亦然。该CMAKE_BUILD_TYPE变量对 MSVC 等多配置生成器没有影响。

您可能会更好地为不同的配置指定不同的安装路径?

尽管如此,要回答您的问题,该论点仅在与我相信的 argDOWNLOAD_DIR一起使用时才适用。URL的文档ExternalProject并没有真正说明这一点,但这篇文章可能会更清楚一点。

要解决这个问题,我认为您可以跳过 installSFMLRelease 的指定DOWNLOAD_DIR,跳过 installSFMLDebugAndDocs 的整个下载阶段,而是检索 installSFMLRelease 的值SOURCE_DIR并将其传递给调试版本:

ExternalProject_Add(
    installSFMLRelease
    PREFIX ${TMPDIR}
    DOWNLOAD_DIR ${TMPDIR}/SFML
    GIT_REPOSITORY git://github.com/LaurentGomila/SFML.git
    GIT_TAG 2.0
    CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${SFML_INSTALL_PREFIX}
    CMAKE_GENERATOR ${CMAKE_GENERATOR}
    UPDATE_COMMAND "")

ExternalProject_Get_Property(installSFMLRelease source_dir)

ExternalProject_Add(
    installSFMLDebugAndDocs
    DEPENDS installSFMLRelease
    DOWNLOAD_COMMAND ""
    URL file://${TMPDIR}/SFML
    SOURCE_DIR ${TMPDIR}/SFML
    SOURCE_DIR ${source_dir}
    CMAKE_ARGS -DCMAKE_INSTALL_PREFIX:PATH=${SFML_INSTALL_PREFIX}
               -DCMAKE_BUILD_TYPE:STRING=Debug
               -DSFML_BUILD_DOC:BOOL=TRUE)

于 2013-05-21T02:45:17.730 回答
0

我用 libgit 试过了;git 直接克隆到 ${TMPDIR}/src/installLIBGITRelease 而不使用 DOWNLOAD_DIR,因此 DOWNLOAD_DIR 中没有 CMakeLists。

于 2013-05-17T09:13:17.283 回答