【问题标题】:How to create a new file copying a header file with the expanded macro如何使用扩展宏创建一个复制头文件的新文件
【发布时间】:2021-12-22 14:37:25
【问题描述】:

我有一个带有声明函数的宏的头文件。我需要将我的头文件导入到LabView,但他无法读取宏,因此无法识别我声明的函数。

我想在构建期间使用扩展宏生成另一个代码文件。

在 Eclipse 上有一个构建配置吗?

示例:

宏:

#define FUNCTION_SIGNATURE(TYPE, RET, FUNCTION) \
    RET TYPE##_##FUNCTION(int port, char* id)   \

header.h

FUNCTION_SIGNATURE(TEST, int, init);

我需要一个包含扩展宏的文件是这样的:

int  TEST_init(int port, char* id);

OBS:

  • 我的项目是一个共享库 (DLL)

  • 我正在使用Eclipse IDE for C/C++ Development

  • 编译器是gcc

编辑 这是我导入labview的DLL,导入时需要一个头文件来链接DLL的函数,这是我的问题,它不能扩展宏来读取函数声明,所以我想要一种方法来传递扩展的宏到另一个文件,labview 不理解扩展的宏。这个问题只针对头文件。

【问题讨论】:

  • 我不明白这个问题。你的宏正在做你所期望的。正常输入有什么问题?顺便说一句,您可能正在使用 gcc 编译器。
  • 我重写了@BarmakShemirani 的问题
  • 不知道能不能做到。这些是你自己的 c 函数吗?我的意思是,如果它与 MinGW 相关,它可能有很多用于 Windows API 的宏,可能 LabView 无论如何都无法处理。
  • 这是我导入labview的DLL,导入时需要一个头文件来链接DLL的函数,这是我的问题,它不能扩展宏来读取函数声明,所以我'想要一种将扩展宏传递给另一个文件的方法,labview 不理解扩展宏。这个问题只针对头文件。
  • 您可以告诉 GCC 在预处理后打印结果,通过选项-E,这将展开所有宏。将此输出保存在一个不同命名的标头中,从其原始名称派生,例如“library-expanded.h”,并将其输入 LabView。您可以尝试在 Eclipse 中使用 pre-build 或 post-build 命令,具体取决于您的项目类型,或者将此标头添加为额外目标。

标签: c gcc build eclipse-cdt labview


【解决方案1】:

要获得预处理的头文件,请使用 GCC 的选项-E。它在预处理阶段之后产生一个输出,包括所有宏的扩展。

gcc -E library.h -o library_expanded.h 可以解决问题。根据自己的喜好调整文件名。

要在您的构建中自动执行此操作,请使用 IDE 的适当构建命令,或将扩展的标头添加到您的 Makefile。我建议仅在您的库构建成功时才运行此命令。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多