如何将随ExternalProject_Add一起安装的库添加到目标包含
How to add libraries installed with ExternalProject_Add to target includes
我正在尝试通过ExternalProject_Add
将外部库包含在cmake项目中。 为了尝试此功能,我创建了一个最小的工作示例,该示例涉及使用ExternalProject_Add
将 pugixml 添加到项目中。但是,我在寻找一种方法将库的头文件从外部项目的本地安装(即 pugixml 的头文件(添加到项目的包含路径中时遇到了问题。
最小工作示例的项目树组织如下:
.
├── build
├── CMakeLists.txt
└── src
├── CMakeLists.txt
└── main.cpp
在此项目树中,build
是指构建目录和调用 cmake 以生成构建的路径。
./CMakeLists.txt
内容如下:
cmake_minimum_required(VERSION 3.0)
include(ExternalProject)
ExternalProject_Add(pugixml
GIT_REPOSITORY https://github.com/zeux/pugixml.git
INSTALL_DIR ${PROJECT_BINARY_DIR}/extern_install/pugixml
CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=<INSTALL_DIR>
)
add_subdirectory(src)
在上面的示例中,我将pugixml添加为外部项目,该项目将安装在项目的二进制目录中,其文件将由存储在./src
中的可执行文件使用。因此,./src/CMakeLists.txt
的内容是:
project(foo)
add_executable(foo main.cpp)
target_link_libraries(foo ${pugixml_LIBRARIES})
include_directories(${pugixml_INCLUDE_DIR}) # this part doesn't work
这正是我遇到问题的部分。 我假设一旦添加并安装了外部项目,ExternalProject_Add
就会定义一些方便的库来帮助引用库文件和包含目录。 但是,这行不通。 有谁知道使用ExternalProject_Add
包含外部库的正确方法是什么?
不幸的是,这根本行不通。外部项目的生成是在生成时完成的,而不是在 CMake 配置/生成期间完成的。提示是The ExternalProject_Add function creates a custom target to drive download, update/patch, configure, build, install and test steps of an external project:
(来自CMake(
因此,您必须自己定义所有变量。另请参阅: CMake - 链接到从ExternalProject_add((下载的库(我实际上将其标记为链接问题的副本,因为问题是相同的(
顺便说一句:我也不喜欢这样做的方式。这样就不能简单地使用find_package
等。
使用它的预期方法是"超级构建项目":定义 1 个 CMakeLists,其中所有依赖项和项目只有ExternalProject_Add
个。然后它将与find_package
一起工作。
- Visual Studio 中的 CMake 项目:如何添加其他包含和库目录?
- 将 c++ 包含添加到日食的正确方法
- 如何在内核中添加包含库的路径?
- std 不包含,但它应该添加库
- 在 Android Studio 中添加 C/C++ 的包含路径
- 在我的 CLR 项目中添加包含会导致无法在启用 /clr 的情况下编译 WLR
- 如何在忍者上添加包含路径,并为VS 2019添加叮当
- 如何在不扩展的情况下基于 RHIDE 中的环境变量添加包含目录
- 如何使用 CMake 正确添加包含目录
- Cmake 添加包含路径到叮当声
- Qt .pro文件:添加包含"include"目录的路径不起作用
- 如何使用 CMake 从根文件夹外部添加包含目录
- VS2012 C++ - 阻止 Visual Studio 自动添加包含
- G++添加包含和链接路径
- 在c++中添加包含多个文件的库
- 如何添加包含路径的flycheck c/c++-clang
- NuGet不添加包含目录
- 是否可以从FTP地址添加包含路径到visual studio ?
- 是否有一种方法来添加包含目录从c++代码
- 向std::map添加包含不可复制/移动对象的结构体