我正在尝试通过<title id="page-title"></title>
<div class="div-container">
<div class="container">
<p class="info">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Sed euismod nisi porta lorem mollis aliquam. Aliquam faucibus purus in massa tempor. Enim neque volutpat ac tincidunt. At quis risus sed vulputate odio ut enim blandit volutpat.</p>
</div>
<div class="div-container">
<h2 class="h2">Sample</h2>
<p class="p2">P2</p>
<p class="p3">p3</p>
<p id="p4"></p>
</div>
</div>
将外部库包含到cmake项目中。为了试用此功能,我创建了一个最小的工作示例,其中涉及使用ExternalProject_Add
将pugixml添加到项目中。但是,我在从项目的包含路径中从外部项目的本地安装(即pugixml的标题)中添加库的头文件的方法中遇到了问题。
最小工作示例的项目树的组织方式如下:
ExternalProject_Add
在此项目树中,.
├── build
├── CMakeLists.txt
└── src
├── CMakeLists.txt
└── main.cpp
指向构建目录和调用cmake生成构建的路径。
build
的内容如下:
./CMakeLists.txt
在上面的示例中,我添加了pugixml作为要安装在项目二进制目录中的外部项目,该文件的文件将由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)
中存储的可执行文件使用。因此,./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
包含外部库的正确方法是什么?
答案 0 :(得分:0)
不幸的是,这根本不起作用。外部项目的构建是在构建时完成的,而不是在CMake配置/生成过程中完成的。提示是The ExternalProject_Add function creates a custom target to drive download, update/patch, configure, build, install and test steps of an external project:
(from CMake)
因此,您将必须自行定义所有变量。另请参阅:CMake - linking to library downloaded from ExternalProject_add()(由于问题相同,我实际上将其标记为链接问题的重复项)
顺便说一句:我也很不喜欢这样做的方式。这样一来,人们不能简单地使用find_package
等。
使用此方法的预期方式是“超级构建项目”:定义1个CMakeList,其中对于所有依赖项和项目,您只有ExternalProject_Add
个。然后它将与find_package
一起使用。