C 仅为Automake文件中的一个程序设置预处理器指令

C 仅为Automake文件中的一个程序设置预处理器指令,c,makefile,c-preprocessor,automake,C,Makefile,C Preprocessor,Automake,假设我们有一个源文件“a.c” “a.c”源文件用于构建程序“Prog1”、“Prog2”和“Prog3” 假设“a.c”使用一个名为“foo()”的函数,该函数仅在“x.c”中定义。因此,将生成“Prog1”,但“Prog2”和“Prog3”不会编译 还假设“a.c”在生成程序Prog1时需要调用函数bar1(),在生成程序Prog2时需要调用函数bar2(),在生成程序Prog3时需要调用函数bar3() 我们应该如何创建automake Makefile.am来支持这一点 在自动生成文件“

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

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

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

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

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

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


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

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

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

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\u PROG\u CC\u C\O
,因为
a.C
会使用不同的选项编译三次。

展示您的尝试。
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