如何操作 headers 与 CMake 和 CMakeLists.txt 的链接

How to manipulate headers linking with CMake and CMakeLists.txt

有没有办法在 CMakeLists.txt 的指令之一中为 #included 资源创建别名?

我正在寻找一种在 CMakeLists.txt 中定义某些东西的方法,因此任何出现的全局资源如

#include <some/global/dependency/file.h>

将别名为正确的资源,因此 CMake 还将在以下位置查找它

#include "../file/is/here/file.h"
#include "file.h"
#include <alias.h> 

为什么?

我正在使用容器化构建系统处理一个非常复杂的项目。意味着,要使项目在任何 IDE 中都能很好地发挥作用,需要进行大量手动工作。实际上,主项目中有很多子项目是单独编译的,有很多专门的配置。

我正在使用 CLion 作为我的 IDE。 CLion 开箱即用地支持 CMake,但我的项目没有使用 cmake :) 我通过使用 include_directories() 指令简单地包含许多文件夹(带有 header 文件)来创建自定义 CMakeLists.txt 文件,现在它工作得很好。它能够识别 symbols/navigation/macros 生成并为包含的文件建立一个很好的索引。 但是我有这个问题,在某些文件中,CLion 无法识别文件路径,因为 #include 指的是全局(预构建/容器化)path/file,它在我的真实文件系统中不存在,但通常,任何此类资源都存在于项目中不同的路径下。所以我想知道有没有办法只指示 CMake 执行以下操作:

  1. 如果要求 #include 来自 XXX 路径的内容
  2. 然后首先在 YYY 路径或 ZZZ 路径等下查找它...
  3. 如果上述第2步没有找到资源,请在XXX路径下寻找

如果您能帮助我通过使用更好的术语等编辑问题和标题来改进问题和标题,我将不胜感激...

CMake 本身不提供编译器,甚至不是构建工具。所以,如果编译器不能替换包含目录 "on fly",CMake 就不能这样做。

如果允许复制 headers - 将它们复制到适当的位置,这样 include_directories() 就可以了。

如果您被允许复制和修改源代码,您可以将它们复制到新位置并在其上 运行 扫描仪,这会修改 #include 指令。

不然你就倒霉了