【问题标题】:How to manipulate headers linking with CMake and CMakeLists.txt如何操作与 CMake 和 CMakeLists.txt 链接的标头
【发布时间】:2018-01-24 15:20:13
【问题描述】:

有没有办法在 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() 指令简单地包含许多文件夹(带有头文件)创建了自定义 CMakeLists.txt 文件,现在它运行良好。它能够识别符号/导航/宏生成并为包含的文件建立一个很好的索引。 但是我有这个问题,在某些文件中,CLion 无法识别文件路径,因为#include 指的是我的真实文件系统上不存在的全局(预构建/容器化)路径/文件,但通常,任何此类资源存在于不同路径下的项目中。所以我想知道有没有办法只指示 CMake 执行以下操作:

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

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

【问题讨论】:

    标签: cmake clion


    【解决方案1】:

    CMake 本身不提供编译器,它甚至不是构建工具。因此,如果编译器不能“即时”替换包含目录,CMake 就不能这样做。

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

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

    否则你就不走运了。

    【讨论】:

    • 扫描仪是什么意思?谢谢
    • “扫描仪”是指脚本或程序,它找到#include 指令(带有正则表达式等)并替换它们。
    • 感谢您的帮助。我接受答案。我希望有更多有趣的解决方案来解决这个问题。
    猜你喜欢
    • 2018-08-28
    • 2020-12-14
    • 2014-03-06
    • 1970-01-01
    • 2017-11-27
    • 2021-08-21
    • 2023-03-15
    • 1970-01-01
    • 2020-01-28
    相关资源
    最近更新 更多