根据目标更改Makefile变量值

sth*_*tfo 13 makefile

我不熟悉makefile,但习惯于简单的.现在,我手边有一项任务.

我需要编译和链接测试应用程序与不同的库和基于给定目标的不同包含路径.如果target是TARGET1,则在编译期间链接LIB1并包含INCLUDEPATH1.类似地,如果给定的目标是TARGET2,则在CFLAGS中使用INCLUDEPATH2进行编译并与LIB2链接.

%.o: %.c
    @echo [CC]  $< ...
    $(CC) $(CFLAGS) -o $*.o $<
Run Code Online (Sandbox Code Playgroud)

现在我有一个如上所述的规则来编译我的测试应用程序.现在,如何根据目标更改CFLAGS.

Joh*_*all 30

如果您使用的是GNU Make,则可以使用特定于目标的变量:

target1: CFLAGS = -IINCLUDEPATH1
target1: LDLIBS = -lLIB1

target2: CFLAGS = -IINCLUDEPATH2
target2: LDLIBS = -lLIB2

all: target1 target2

target1: target1.o misc.o
target2: target2.o
Run Code Online (Sandbox Code Playgroud)

然而,这并不像你想要的那样工作:如果target1和target2共享一些源文件,你需要安排它们每次被编译两次并使用不同名称的.o文件 - 这将是复制你的makefile.

另外,如果你键入make target1然后-IINCLUDEPATH1将传播到汇编misc.c,根据需要.但是如果你键入make misc.o它就无法知道这最终会发送到target1并且misc.c的编译将不会获得特殊的$ CFLAGS值(尽管它会获得全局值,如果有的话).

所以这只在简单的情况下才有用.但也许你的情况足够简单.