如何使这个Makefile更通用
How can I make this Makefile more generic?
我正在通过完成许多小程序来学习C++,每个程序都包含在一个cpp文件中。我还想了解更多关于Makefile的信息,并决定编写一个Makefile,它将编译我所有的小程序,并为每个程序生成一个可执行文件。使用我当前的Makefile,我必须:
-
将名称附加到"BINARIES"的末尾
-
复制重复的目标并将目标名称替换为二进制名称
我如何编辑这个Makefile,使其更加通用,这样我就可以简单地将新程序的名称附加到"BINARIES"的末尾,而不必继续复制和粘贴重复的目标
BIN=./bin/
SOURCE=./src/
CXX=g++
CXXFLAGS=-g -c -Wall
BINARIES=sums-in-loop sum-in-loop sum-of-two
RM=rm -f
all: sums-in-loop sum-in-loop sum-of-two
sums-in-loop:
$(CXX) $(CXXFLAGS) $(SOURCE)$@.cpp -o $(BIN)$@
sum-in-loop:
$(CXX) $(CXXFLAGS) $(SOURCE)$@.cpp -o $(BIN)$@
sum-of-two:
$(CXX) $(CXXFLAGS) $(SOURCE)$@.cpp -o $(BIN)$@
clean:
$(RM) $(BIN)*
通常的方法是使用模式规则:
BIN=bin
SOURCE=src
CXX=g++
CXXFLAGS=-g -Wall
BINARIES=sums-in-loop sum-in-loop sum-of-two
RM=rm -f
all: $(addprefix $(BIN)/,$(BINARIES))
$(BIN)/%: $(SOURCE)/%.cpp
$(CXX) $(CXXFLAGS) $< -o $@
clean:
$(RM) $(BIN)/*
使用Makefile中的循环,您可以执行以下操作:
$(foreach bin,$(BINARIES),$(CXX) $(CXXFLAGS) $(SOURCE)$(dir).cpp -o $(BIN)$dir;)
您可以找到一些信息-->http://www.gnu.org/software/make/manual/make.html#Foreach-函数
相关文章:
- localtime() 函数正在调用 ___lll_lock_wait_private(),这会使线程陷入死锁
- 有没有办法使这段代码更快?
- 这C++指针使用线程安全吗?
- 在Visual Studio中,与std::async一起使用时不调用"thread_local"变量"析构函数,这是一个错误吗?
- 当自动编译对象文件时,如何使我的makefile使用我的cflags标志
- 这是删除基类指针的内存泄漏吗,以及如何使其正确
- 如何检查这是否使序列不增加
- 为什么添加constexpr使VS2013拒绝这一点
- Autotools Automake生成的Makefile无效:使All-Am
- 语法错误,也想知道我是否可以使这段代码更有效率
- 我想我明白这一点.但是有没有办法使这更简单
- 有人可以告诉我任何不同的方法来使这段代码更快
- 如何使这两个模板类协同工作?(C++中的属性)
- Ubuntu 上的 Eclipse:没有规则使用现有的 makefile/project 使目标"all"错误
- 我如何使用类型特征使这种数组到指针的转换明确
- (SQLite + Qt + CodeBlock)如何使这3个作品
- 如何使这段代码更快
- Makefile中的这一行是什么意思?
- 我可以让我的 Makefile 自动使 GCC 使用它支持的最新标准吗?
- 如何使这段代码更好?(C++温度转换器)