gpt4 book ai didi

c++ - 如何一次编译多个独立的CPP文件?

转载 作者:太空宇宙 更新时间:2023-11-04 14:48:18 24 4
gpt4 key购买 nike

我不是在问 makefile。我有多个 .cpp 文件用于测试目的。所以在终端中,我需要写:

g++ test1 -o run1
g++ test2 -o run2
...

如果 .cpp 文件被更改,那么我将不得不再次运行上述命令。这种情况有解决办法吗?谢谢!

我认为makefile 无法实现这个目标。所以才这么问。我将保留上述问题不变。下面是我的 makefile,我应该如何为多个文件更改它?

GCC=g++
GFLAGS=-Wall -g -std=c++11 -O3
SRC=./test1.cpp
OUT= test1.out

g:
$(GCC) $(GFLAGS) $(SRC) -o $(OUT)

clean:
rm -rf $(OUT) ./*~ ./*.o

最佳答案

我知道您不是在询问Makefile,但对于您描述的场景,makefile 可以像这样简单(使用 GNU Make):

all: test1 test2

这会将程序 test1.cpptest2.cpp 转换为可执行文件 test1test2

ADDED NOTES 修正问题

如果您希望能够设置编译器和标志,那么您可以使用编译器变量 CXX 和编译器标志的 CXXFLAGS 来做到这一点:

CXX := g++ # set the compiler here
CXXFLAGS := -Wall -Wextra -pedantic-errors -g -std=c++11 -O3 # flags...
LDFLAGS := # add any library linking flags here...

# List the programs in a variable so adding
# new programs is easier
PROGRAMS := test1 test2

all: $(PROGRAMS)

# no need to write specific rules for
# your simple case where every program
# has a corresponding source code file
# of the same name and one file per program.

clean:
rm -f *.o $(PROGRAMS)

注意:目标 all: 是默认目标,当您键入不带参数的 make 时它会运行。

最后一个例子:一个程序需要两个输入源文件,所以它需要一个特殊的规则。另一个文件仍然会像前面的示例一样自动编译。

CXX := g++ # set the compiler here
CXXFLAGS := -Wall -Wextra -pedantic-errors -g -std=c++11 -O3 # flags...

# List the programs in a variable so adding
# new programs is easier
PROGRAMS := test1 test2

all: $(PROGRAMS)

# If your source code filename is different
# from the output program name or if you
# want to have several different source code
# files compiled into one output program file
# then you can add a specific rule for that
# program

test1: prog1.cpp prog2.cpp # two source files make one program
$(CXX) $(CXXFLAGS) -o $@ $^ $(LDFLAGS)

clean:
rm -f *.o $(PROGRAMS)

注意: $@ 只是表示输出程序文件名(test1),$^ 表示所有列出的输入文件(在本例中为 prog1.cpp prog2.cpp)。

关于c++ - 如何一次编译多个独立的CPP文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28860625/

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