将索引宏传递给已编译的模块

Posted

技术标签:

【中文标题】将索引宏传递给已编译的模块【英文标题】:Passing an index macro to compiled modules 【发布时间】:2015-03-28 23:18:00 【问题描述】:

我使用 makefile 编译我的项目,该文件的表达式为 g++ -c a.cpp b.cpp c.cpp 有没有简单的方法来定义一个会增加每个文件的宏? (例如 a 0、b 1、c 2)

不用说,但项目由无数文件组成,并且数量会发生变化,因此硬编码任何内容都是不可能的。

【问题讨论】:

“增加每个文件”是什么意思?您是否需要一个计数器来计算您传递的文件,或者一种从“a.cpp”开始并自动以“z.cpp”结尾的方法,或者其他什么? 另外,命令g++ a.cpp b.cpp c.cpp 不是有效的编译器命令。如果您需要帮助,请具体说明:您真正运行什么?如果您确实对所有源文件调用了单个编译器调用,那么 make 将无法帮助您计算它们,因为 make 调用一个命令来构建它们;它怎么能算什么? 好吧,我实际上运行 g++ -C (files),它编译源文件但不链接它们。关键是要有一个整数宏,它对于每个目标文件都是唯一的。 这个宏必须适用于您传递给它的任何个文件名,还是可以限制为文件名列表? 它必须适用于任何文件名列表。虽然我用一些 makefile 黑魔法解决了 【参考方案1】:

目前还不太清楚您要做什么,但应该可以用 bash 命令代替:

%.c: 
    @#do nothing

all:  depA.c depB.c depC.c
    echo `i=0; for f in $^; do echo $$f; echo $$i; i=$$((i+1)); done`

会输出

echo `i=0; for f in depA.c depB.c depC.c; do echo $f; echo $i; i=$((i+1)); done`
depA.c 0 depB.c 1 depC.c 2

如果您正在处理变量列表,当然可以将 $^ 替换为另一个变量。

约翰

【讨论】:

以上是关于将索引宏传递给已编译的模块的主要内容,如果未能解决你的问题,请参考以下文章

给已安装的NGINX添加新的模块

模块化程序-宏

如何将活动中的意图传递给已打开的片段

Nginx常用基础模块

Android - 将键传递给已启动的父活动

excel VBA的宏不会在同一模块中运行第二个子