[英]compile c++ code using makefile dynamically
它与makefile有关,我想知道makefile是否可以动态编译cpp文件。
假设我有main.cpp,a.cpp,b.cpp和c.cpp文件(大概可以添加d.cpp,e.cpp等)
main.cpp文件具有main()函数,a,b和c具有其自己的函数。
有时我只想编译main.cpp,a.cpp和b.cpp文件并链接它们。
但是有时会编译main.cpp,b.cpp和c.cpp文件并链接。 我没有选择要编译的文件的规则。
我觉得像
使ab
使公元前
使交流
要么
使abc
那么只有指定的文件名可以编译并与main.cpp文件链接。
有什么好方法吗?
谢谢。
有一个简单的解决方案:生成可以在命令行上传递的变量。 它们优先于Makefile中的定义。
$ cat Makefile
SRCS = $(filter-out main,$(patsubst %.cpp,%,$(wildcard *.cpp)))
main: main.o $(patsubst %,%.o,$(SRCS))
$(CXX) -o $@ $^
clean:
rm -f $(wildcard *.o) main
然后,如果您只想链接a
和b
:
$ make SRCS="a b"
c++ -c -o main.o main.cpp
c++ -c -o a.o a.cpp
c++ -c -o b.o b.cpp
c++ -o main main.o a.o b.o
如果只想链接c
和d
:
$ make clean
rm -f a.o b.o main.o main
$ make SRCS="c d"
c++ -c -o main.o main.cpp
c++ -c -o c.o c.cpp
c++ -c -o d.o d.cpp
c++ -o main main.o c.o d.o
和默认值:
$ make clean
rm -f c.o d.o main.o main
$ make
c++ -c -o main.o main.cpp
c++ -c -o a.o a.cpp
c++ -c -o b.o b.cpp
c++ -c -o c.o c.cpp
c++ -c -o d.o d.cpp
c++ -o main main.o a.o b.o c.o d.o
如果默认设置没有意义(例如,因为方法是在多个源文件中定义的),请在Makefile中更改SRCS
的默认值:
SRCS = a b
注意:请勿混淆make变量,该定义出现在命令行上的make
命令之后: make ... VAR=VALUE ...
和可以传递给make
过程的环境变量: VAR=VALUE make ...
。 两者之间有关系,但它们是完全不同的东西。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.