【问题标题】:Makefile: How do I use variables in the left hand side of the rule?Makefile:如何在规则的左侧使用变量?
【发布时间】:2013-09-17 13:04:13
【问题描述】:

假设我想重写这个:

main.o: main.cpp
    g++ -c main.cpp

factorial.o: factorial.cpp
    g++ -c factorial.cpp

hello.o: hello.cpp
    g++ -c hello.cpp

以更通用的方式,如下所示:

SOURCES = main factorial hello

$(SOURCES).o: $(SOURCES).cpp
    g++ -c $(SOURCES).cpp

我该怎么做?

【问题讨论】:

标签: variables makefile


【解决方案1】:

首先我们告诉编译器如何对输出文件进行nme,以避免误解:

main.o: main.cpp
    g++ -c main.cpp -o main.o

factorial.o: factorial.cpp
    g++ -c factorial.cpp -o factorial.o

hello.o: hello.cpp
    g++ -c hello.cpp -o hello.o

然后我们输入automatic variables,以减少冗余:

main.o: main.cpp
    g++ -c $< -o $@

factorial.o: factorial.cpp
    g++ -c $< -o $@

hello.o: hello.cpp
    g++ -c $< -o $@

然后我们意识到这些规则看起来都一样,所以我们将它们组合为static pattern rule

main.o factorial.o hello.o: %.o : %.cpp
    g++ -c $< -o $@

然后我们使用一个变量来存储对象的名称:

OBJECTS := main.o factorial.o hello.o

$(OBJECTS): %.o : %.cpp
    g++ -c $< -o $@

【讨论】:

  • 您不需要静态模式规则。您可以只使用内置的模式规则。只需一行 makefile all: main.o factorial.o hello.o 即可。
  • @MadScientist:是的。 (事实上​​,由于原来的 makefile 没有 all 规则,我可以用一个 word makefile main.o: 替换它。)但是使用像那种失败的内置规则问题的目的是展示如何使用变量作为目标。
猜你喜欢
  • 2017-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-07
  • 1970-01-01
相关资源
最近更新 更多