【发布时间】:2018-04-02 22:17:31
【问题描述】:
我有一个包含很多包含的 C 程序,例如,有很多宏用于自动生成模块和构建过程中的函数
#define MODULE_DEFINE(M) void M##_init (module* module) {\
module->name = #M;
#define MODULE_END };
MODULE_DEFINE (hello)
printf("module name is : %s\n",module->name);
MODULE_END
现在,一旦模块被编译和链接,我需要将它们全部包含在一个公共头文件中。一种方法是手动包含所有这些,但我想知道是否有更好的方法来解决它?我已经将它们传递给如下所示的数组。
module mod_list[] = {
MOD( hello )
};
使用的MOD 是另一个宏。现在相关的部分是,所有模块都遵循include as
#include <modules/hello.h>
如上例所示。我可以以某种方式迭代或创建一个列表以从列表中自动包含吗?我不介意从数组更改为其他内容,因为我知道数组是在运行时定义的,并且宏不可能实际迭代它。如果迭代是可能的,我可以定义一个通用列表来包含所有内容并定义数组,从而使过程自动化一点。感谢您的帮助。
编辑
正如所指出的,仅使用宏并不完全可能。现在我使用CMake 作为我的构建工具。所有模块都以格式放置在单独的目录中
modules
└── hello
├── hello.c
└── hello.h
那么我可以以某种方式列出模块内CMake 中的所有文件夹并将它们传递给configure_file 以进行所需的导入吗?
【问题讨论】:
-
So can i somehow list all folders in CMake inside modules- file(GLOB) 应该可以帮助您完成这项任务。and pass them to configure_file to make the needed imports?- 在找到的文件夹上使用for循环,您可以使用#include<>指令列表填充变量。然后你可以在configure_file中使用这个变量。