gpt4 book ai didi

c++ - 使用makefile动态编译c++代码

转载 作者:行者123 更新时间:2023-11-28 04:53:17 25 4
gpt4 key购买 nike

是关于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文件并链接。我想选择编译哪些文件没有规则。

我的想法是什么

做一个b

制作b c

做一个c

制作a b c

那么只有指定的文件名才能被编译并链接到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

然后,如果您只想链接 ab:

$ 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

如果你只想链接cd:

$ 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 ...。两者有关系,但又是完全不同的东西。

关于c++ - 使用makefile动态编译c++代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47724719/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com