[英]Auto include header files using cmake and macros in c?
我有一個包含很多包含內容的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作為
#include <modules/hello.h>
如上例所示。 我可以以某種方式遍歷或創建要從列表中自動包含的列表嗎? 我不介意從數組更改為其他數組,因為我知道數組是在運行時定義的,宏實際上不可能對此進行迭代。 如果有可能進行迭代,我可以定義一個公共列表以包含所有元素並定義數組,從而稍微自動化該過程。 謝謝你的幫助。
如所指出的,這並非僅使用宏是完全可能的。 現在,我使用CMake
作為構建工具。 所有模塊均以以下格式放置在單獨的目錄中
modules
└── hello
├── hello.c
└── hello.h
所以我能以某種方式列出模塊內部CMake
中的所有文件夾,並將它們傳遞給configure_file
進行所需的導入嗎?
C預處理程序本身並不是一種足夠強大的語言來執行此類操作。 您可能要看的是代碼生成 ,您需要執行某種預構建步驟,該步驟使用MOD( hello )
行讀取文件,並生成一個列出相應的#include <modules/hello.h>
線。 然后,將生成的文件包括在需要的位置。
您可以使用任何所需的語言編寫此預構建步驟,合理的選擇可能是: sed
, awk
, perl
,C,Python,Ruby等。
CMake提供命令generate_file
。 您使用它,用其值替換某些變量。 如果您使用##_init (module* ${MODULE_NAME})
並在名為MODULE_NAME的模塊上的循環中包含CMake變量,則可以找到解決方案。
我不確定這是否是個好主意。 為什么不能使用一些配置頭文件 ?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.