为 Automake 文件中的一个程序设置 Preproccessor 指令

Posted

技术标签:

【中文标题】为 Automake 文件中的一个程序设置 Preproccessor 指令【英文标题】:Set Preproccessor directive for only one program in Automake file 【发布时间】:2016-06-16 12:20:26 【问题描述】:

假设我们有一个源文件“a.c”。

“a.c”源文件用于构建程序“Prog1”、“Prog2”和“Prog3”。

"Prog1" also uses source file "x.c"
"Prog2" uses source file "y.c"
"Prog3" uses source file "z.c"

假设“a.c”使用一个名为“foo()”的函数,该函数仅在“x.c”中定义。因此“Prog1”会被编译,但“Prog2”和“Prog3”不会编译。

还假设“a.c”在构建程序Prog1时需要调用函数bar1(),在构建程序Prog2时需要调用bar2(),在构建程序Prog3时需要调用bar3()。

我们应该如何创建 automake Makefile.am 来支持这一点?

在自动生成文件“Makefile.am”中构建每个程序时,我一直在尝试指定不同的预处理器指令,但到目前为止还看不到它是如何完成的。

任何帮助将不胜感激。谢谢。

【问题讨论】:

向我们展示你的尝试。 【参考方案1】:

最简单的解决方案?为三个不同的目标文件创建三个不同的规则,这些文件都是从a.c 源文件构建的。

然后每个规则都可以轻松添加特定构建所需的额外标志。

【讨论】:

【参考方案2】:
bin_PROGRAMS = prog1 prog2 prog3

prog1_SOURCES = a.c x.c
prog1_CPPFLAGS = -DPROG1

prog2_SOURCES = a.c y.c
prog2_CPPFLAGS = -DPROG2

prog3_SOURCES = a.c z.c
prog3_CPPFLAGS = -DPROG3

但要使用它,您需要确保在您的configure.ac 中调用AM_PROG_CC_C_O,因为a.c 会使用不同的选项编译三次。

【讨论】:

以上是关于为 Automake 文件中的一个程序设置 Preproccessor 指令的主要内容,如果未能解决你的问题,请参考以下文章

使用 automake 设置每个文件的标志

Automake:设置数据文件权限模式

使用 Automake 为 bin_SCRIPTS 中的每个文件应用一个命令

如何设置 automake 和 autoconf 以有条件地构建程序(测试或其他)

设置 %option prefix= 时如何让 automake 识别 flex 生成的非默认文件名

一个简单的执行程序的GNU automake自动生成Makefile的方法及案例