请考虑以下情况:我想通过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
- 部分正确?
答案 0 :(得分:0)
我用libgit尝试过; git克隆直入 $ {} TMPDIR / SRC / installLIBGITRelease 不使用DOWNLOAD_DIR,因此DOWNLOAD_DIR中没有CMakeLists。
答案 1 :(得分:0)
首先,我不确定你的目标是否会在这里得到满足。如果你在调试模式下从MSVC构建installSFMLRelease,那么你将得到一个这样的Debug构建。反之亦然,发布版本的installSFMLDebugAndDocs。 CMAKE_BUILD_TYPE
变量对MSVC等多配置生成器没有影响。
您可能最好为不同的配置指定不同的安装路径?
尽管如此,为了回答您的问题,DOWNLOAD_DIR
参数仅适用于我认为与URL
arg一起使用的情况。 ExternalProject
的文档并没有真正说明这一点,但是this article可能会更加清晰。
要解决此问题,我认为您可以跳过为installSFMLRelease指定DOWNLOAD_DIR
,跳过installSFMLDebugAndDocs的整个下载阶段,而是检索installSFMLRelease的SOURCE_DIR
值并将其传递给Debug版本:< / p>
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)