- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有许多外部依赖项,我想通过 ExternalProject_Add
加入到我的项目中.诀窍是尽可能以最干净的方式导出包含目录和生成的静态链接库。
是否可以制作FindBoost
依赖于 ExternalProject_Add
或者至少让项目使用 target_link_libraries
拉入库和头文件?
促进
include( ExternalProject )
set( boost_URL "http://sourceforge.net/projects/boost/files/boost/1.63.0/boost_1_63_0.tar.bz2" )
set( boost_SHA1 "9f1dd4fa364a3e3156a77dc17aa562ef06404ff6" )
set( boost_INSTALL ${CMAKE_CURRENT_BINARY_DIR}/third_party/boost )
set( boost_INCLUDE_DIR ${boost_INSTALL}/include )
set( boost_LIB_DIR ${boost_INSTALL}/lib )
ExternalProject_Add( external_boost
PREFIX boost
URL ${boost_URL}
URL_HASH SHA1=${boost_SHA1}
BUILD_IN_SOURCE 1
CONFIGURE_COMMAND ./bootstrap.sh
--with-libraries=filesystem
--with-libraries=system
--with-libraries=date_time
--prefix=<INSTALL_DIR>
BUILD_COMMAND
./b2 install link=static variant=release threading=multi runtime-link=static
INSTALL_COMMAND ""
INSTALL_DIR ${boost_INSTALL} )
set( boost_LIBRARY_SUFFIX .a )
add_library( boost::date_time STATIC IMPORTED )
set_property( TARGET boost::date_time PROPERTY IMPORTED_LOCATION ${boost_LIB_DIR}/libboost_date_time${boost_LIBRARY_SUFFIX} )
set_property( TARGET boost::date_time PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${boost_INCLUDE_DIR} )
add_dependencies( boost::date_time external_boost )
add_library( boost::system STATIC IMPORTED )
set_property( TARGET boost::system PROPERTY IMPORTED_LOCATION ${boost_LIB_DIR}/libboost_system${boost_LIBRARY_SUFFIX} )
set_property( TARGET boost::system PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${boost_INCLUDE_DIR} )
add_dependencies( boost::system external_boost )
add_library( boost::filesystem STATIC IMPORTED )
set_property( TARGET boost::filesystem PROPERTY IMPORTED_LOCATION ${boost_LIB_DIR}/libboost_filesystem${boost_LIBRARY_SUFFIX} )
set_property( TARGET boost::filesystem PROPERTY INTERFACE_LINK_LIBRARIES boost::system )
set_property( TARGET boost::filesystem PROPERTY INTERFACE_INCLUDE_DIRECTORIES ${boost_INCLUDE_DIR} )
add_dependencies( boost::filesystem external_boost )
最佳答案
ExternalProject_Add
创建将驱动拉动外部项目的目标。这意味着下载、构建和安装外部项目发生在 期间。构建步骤 .因此,外部项目的属性在配置步骤中是未知的,因此您不能直接依赖(或 find_package)它。
解决方案是使用所谓的 super 构建。这个想法是使用 find_package
在您的项目中获取依赖项,就好像它们已安装在系统上一样。然后创建另一个包含 ExternalProject_Add
的 CMakeLists.txt所有依赖项的说明 和您的项目 .
当您在 super 构建的 CMakeLists.txt 上调用 cmake 时,它只会设置一个构建系统来下载和构建所有项目,但什么都不做。当您调用 build 时,项目将被一一下载、配置、构建和安装。因此,当涉及到您的项目时,所有依赖项都已安装,并且配置步骤将成功。
super 构建的例子可以在这里找到(我没有尝试过,但至少你可以理解):https://github.com/Sarcasm/cmake-superbuild .请注意,cmake/SuperBuild.cmake 中的最后一条指令是主 CMakeLists.txt(也就是您的项目)的 ExternalProject_Add。
另请参阅 CMake 文档 https://cmake.org/cmake/help/v3.10/module/ExternalProject.html了解如何在 ExternalProject 级别定义依赖项。
关于cmake - 将 Boost 构建为 ExternalProject_Add 并使用 FindBoost 或导出结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46825046/
我想构建 openssl 并将我的项目链接到它。在我的项目中,我有一个名为 net 的库,它是使用 openssl 的部分。所以在我的 net\CMakeList 中,我添加了 include_dir
我想创建一个 cmake 脚本来在我的项目中自动构建 zlib。 我加了 externalproject_add(zlib PREFIX . # download step GIT_REP
是否可以在使用 ExternalProject 时只构建特定目标?特别是,我只需要下载和构建 OpenCoarrays 库的 MPI 版本。我试过了 ExternalProject_Add( Op
我目前正在尝试让可执行文件与它需要的所有依赖项正确链接。 这是依赖项的示例结构: exe -> libA -> libB exe和 libA有自己的存储库。 exe拉入libA像这样的东西: add_
我有一个简单的 CMake 项目,它使用 ExternalProject_Add 来配置和编译 ffmpeg。 CMakeLists.txt 如下所示: cmake_minimum_required(
我基本上问的问题与问过的问题相同 here .然而,这个问题还没有得到回答。 我想在我的项目中使用 googletest。为此,我使用 ExternalProject_Add(),它使用 git 克隆
我有一个带有 autotools 项目的第三方库。我想使用 ExternalProject_Add 来构建库。 这可以通过以下方式完成: ExternalProject_Add(project_lib
我已经非常成功地使用 CMake 来使用 ExternalProject_Add 函数执行构建,但我的公司最近安装了一个代理服务器......这破坏了上述构建脚本。 下载步骤在提取阶段失败,因为下载的
我正在尝试通过 ExternalProject_Add 将外部库包含到 cmake 项目中。为了试用此功能,我创建了一个最小的工作示例,其中涉及使用 ExternalProject_Add 将 pug
我的 CMake 构建过程通过 ExternalProject_add 引入并构建了另一个基于 CMake 的项目。在构建主项目之前,我需要为此目标运行 INSTALL 步骤。但是,我似乎无法将外部项
我在 linux 上有一个 CMake 项目,我正在使用 ExternalProject构建 Google Protobuf。它工作得很好,但是任何后续构建仍然会调用外部项目中的配置步骤(这很烦人,因
我正在尝试使用 CMake 在 64 位 Windows 上编译和构建 OpenSSL。这是代码。 set(VS_ENV_SETUP "\"C:\\Program Files (x86)\\Micro
与以下 CMakeLists.txt构建脚本: include( ExternalProject ) ExternalProject_Add( framework SOURCE_DIR ${frame
我需要使用 ExternalProject_Add 编译 boost 库,构建命令需要带有 Clang 的 MacOS 平台上的 c++11 标志。 命令应该是这样的: ./bin/b2 debug
编辑:我找到了一个可能的原因,但我不明白为什么:下面脚本中的最后一行 Project(Externals)删除后修复了我的问题。所以现在的问题是为什么? cmake_minimum_required(
我只想通过 cmake 下载一个 git 存储库,并将源文件夹复制到其他地方。这是一个最小的工作示例: cmake_minimum_required (VERSION 2.8) project ("m
我正在尝试使用 CMake 的 ExternalProject_Add(...) 在 Linux 中交叉编译 bzip2命令。 但是,为了交叉编译 libbzip,您必须修改一些 Makefile 宏
我有以下 CMakeLists.txt 文件: cmake_minimum_required (VERSION 3.2 FATAL_ERROR) project (utils VERSION 1.0.
我想构建一个第三方项目,该项目已经将 CMake 作为我项目的 CMake strip 的一部分。 ExternalProject_Add 就是为了这个目的,但我发现它只能与特定的生成器一起工作,我希
我正在使用带有 ExternalProject_Add 的 CMake 构建外部库。我使用了答案 here生成以下内容(捕获命令行输入到 CMake 以便将其传递给 ExternalProject_A
我是一名优秀的程序员,十分优秀!