Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在CurrentProject中使用ExternalProject的目标_C++_Cmake - Fatal编程技术网

C++ 在CurrentProject中使用ExternalProject的目标

C++ 在CurrentProject中使用ExternalProject的目标,c++,cmake,C++,Cmake,假设我有两个CMake项目——一个ExternalProject E和我当前的project p。E提供了两种与之交互的方式——它创建了一个pkg config文件和.CMake文件。我希望使用这两个选项中的任何一个来解决在P中使用E的问题 在p的构建中,我需要实现以下步骤: 构建E 安装E。此步骤将创建pkg配置文件(E.pc)或CMake导出的目标文件(ETargets.CMake) 使用P中的E.pc或ETargets.cmake来包含E的标题并链接E的库 我无法使用以下选项使生成正常工作

假设我有两个CMake项目——一个ExternalProject E和我当前的project p。E提供了两种与之交互的方式——它创建了一个
pkg config
文件和
.CMake
文件。我希望使用这两个选项中的任何一个来解决在P中使用E的问题

在p的构建中,我需要实现以下步骤:

  • 构建E
  • 安装E。此步骤将创建pkg配置文件(
    E.pc
    )或CMake导出的目标文件(
    ETargets.CMake
  • 使用P中的
    E.pc
    ETargets.cmake
    来包含E的标题并链接E的库
  • 我无法使用以下选项使生成正常工作:

  • include(ETargets.cmake)
    在P的CMakeLists.txt中。这不起作用,因为
    etarget.cmake
    在配置时不存在
  • 我没有找到从中的CMakeLists.txt提取E.pc中信息的方法
  • add_custom_命令
    add_custom_目标
    处理生成文件的详细路径。这可能/可能不起作用,但无论如何它都会在我的构建中引入大量的锅炉板
  • 我能找到的唯一解决办法是

  • 手动安装E,然后使用P中的
    .cmake
    .pc
    文件(详细信息见答案)
  • 手动清理E安装的目录以查找所需的库。(详细)

  • 这两种解决方案都将一些工作外包给CMake build之外,因此并不令人满意。

    我假设您考虑过使用
    ExternalProject\u Add
    ?ExternalProject_Add(E)在构建时构建项目E。所以,.cmake和.pc文件不能用于配置P(我尝试过的选项中的第1点),所以您需要在配置项目时构建并安装E项目。为此,您可以使用普通的
    execute\u进程
    。或者,您可以通过项目A中的
    add_子目录
    使用项目E。