有没有办法使用cmake下载tarball
Im将libjpeg构建为外部项目。它的构造正常。 此处显示项目文件夹结构:有没有办法使用cmake下载tarball,cmake,Cmake,Im将libjpeg构建为外部项目。它的构造正常。 此处显示项目文件夹结构: ${SOURCE_DIR}/ ${SOME_BUILD_DIR}/ externals/ jpeg-9a/ jpeg-pre/ externals/ jpeg-9a/ jpeg-overlay/ CMakeLists.txt tarballs/ jpegsrc.v9a.tar.gz CMakeLists.txt 但若我从零开始构建项目
${SOURCE_DIR}/
${SOME_BUILD_DIR}/
externals/
jpeg-9a/
jpeg-pre/
externals/
jpeg-9a/
jpeg-overlay/
CMakeLists.txt
tarballs/
jpegsrc.v9a.tar.gz
CMakeLists.txt
但若我从零开始构建项目,tarball会再次下载并解包
换句话说,我清理${SOME\u BUILD\u DIR}/。在下一次构建时,请执行下一步:
下载tarballs/jpegsrc.v9a.tar.gz
将libjpeg解压为externals/jpeg-9a
将externals/jpeg overlay/CMakeLists.txt复制到externals/jpeg-9a
在${SOME_build_DIR}/externals/jpeg-9a中构建libjpeg/
实际上前3点可以省略。但我只对第一个行动感兴趣。有没有办法防止额外下载
这是我的${SOURCE_DIR}/CMakeLists.txt:
有关详细信息,请参阅。不应将生成的文件放在源代码树中 在您的例子中,有问题的行是DOWNLOAD_DIR${CMAKE_CURRENT_SOURCE_DIR}/tarballs。一种更干净的方法是将下载内容放在二进制目录中的一个目录中,然后从那里编译。当然,这意味着在擦除构建目录时,它也将擦除下载的源代码。哪种方法解决了您必须下载已经拥有的文件的问题,尽管可能不是您希望的方式 问题是,这是故意的。擦除二进制目录在概念上等同于告诉CMake从头开始。在这种情况下,尝试重用东西是没有意义的,因为,好吧,你想从头开始。使用CMake实现重用的正确工作流很简单:不要擦除构建目录。相反,如果您想要执行CMake的完全重新配置,则依赖make clean强制执行完全重建,并且仅擦除构建目录 避免重新下载的唯一干净方法是将下载移出ExternalProject命令。例如,您可以将提取的文件放在源树中,并将其作为项目的一部分签入。或者通过实现所需行为的自定义execute_process命令下载它们。如果运行md5 jpegsrc.v9a.tar.gz,则可以使用ExternalProject URL_md5选项使用输出的哈希
ExternalProject_Add(
jpeg
STAMP_DIR ${CMAKE_BINARY_DIR}/externals/jpeg-pre
BINARY_DIR ${CMAKE_BINARY_DIR}/externals/jpeg-${JPEG_VERSION}
URL ${JPEG_URI}
URL_MD5 <md5_hash_of_downloaded_file>
SOURCE_DIR ${JPEG_DIR}
DOWNLOAD_DIR ${CMAKE_CURRENT_SOURCE_DIR}/tarballs
CMAKE_ARGS ""
UPDATE_COMMAND cmake -E copy_directory ${EXTERNALS_DIR}/jpeg-${JPEG_VERSION}-overlay/. ${JPEG_DIR}
INSTALL_COMMAND ""
TEST_COMMAND ""
)
塔克斯。实际上,我在为多平台lin32/lin64/mingw构建的项目中遇到了这个问题。Tarball为每个构建下载一次。我将按照您的建议尝试为下载tarball添加单独的目标。完成。有单独的下载目标。Thanx@ComicSanms。
ExternalProject_Add(
jpeg
STAMP_DIR ${CMAKE_BINARY_DIR}/externals/jpeg-pre
BINARY_DIR ${CMAKE_BINARY_DIR}/externals/jpeg-${JPEG_VERSION}
URL ${JPEG_URI}
URL_MD5 <md5_hash_of_downloaded_file>
SOURCE_DIR ${JPEG_DIR}
DOWNLOAD_DIR ${CMAKE_CURRENT_SOURCE_DIR}/tarballs
CMAKE_ARGS ""
UPDATE_COMMAND cmake -E copy_directory ${EXTERNALS_DIR}/jpeg-${JPEG_VERSION}-overlay/. ${JPEG_DIR}
INSTALL_COMMAND ""
TEST_COMMAND ""
)