如何为C+编写简单的通用构建脚本+;项目 我写的是Linux上的几个文件的C++项目。该项目没有子目录

如何为C+编写简单的通用构建脚本+;项目 我写的是Linux上的几个文件的C++项目。该项目没有子目录,c++,build,build-process,C++,Build,Build Process,我想要一些尽可能简单的通用构建脚本 泛型的意思是,我不想硬编码文件名,这样当我将新的.cpp文件放入项目时,我就不必修改构建脚本。它应该找到并编译当前目录中的所有modyfied源文件,并将目标文件链接到可执行文件中。没别的了 我不在乎你们会用什么工具,因为我还不知道 我不想从基础知识中学习一个工具来写这么简单的东西。现在,我只需要一个代码,我会在需要更新奇的东西时学习 我所尝试的 make: 没有成功: make: *** Brak reguł do zrobienia obiektu `%.

我想要一些尽可能简单的通用构建脚本

泛型的意思是,我不想硬编码文件名,这样当我将新的
.cpp
文件放入项目时,我就不必修改构建脚本。它应该找到并编译当前目录中的所有modyfied源文件,并将目标文件链接到可执行文件中。没别的了

我不在乎你们会用什么工具,因为我还不知道

我不想从基础知识中学习一个工具来写这么简单的东西。现在,我只需要一个代码,我会在需要更新奇的东西时学习

我所尝试的
make
: 没有成功:

make: *** Brak reguł do zrobienia obiektu `%.o', wymaganego przez `a.out'. Stop.
我对这条消息的翻译:

make: *** No rules to make object `%.o', required by `a.out'. Stop.
在有人提问之前,我会回答:是的,我的makefile缩进了1个制表符,而不是空格

make-d
打印出664行,所以我不会将其粘贴到这里

scons
: 它是从某个StackOverflow答案复制的,但它的目的是从一个源文件构建一个可执行文件,因为当我想要使用它时,我会收到链接器错误

我用bash结束了我们的对话:

g++ -Wall *.cpp

简单。工作做得好。。。现在。我认为它不优雅,我知道它可能是无效的,因为它会重新编译所有的东西,甚至是未被修改的文件。

< P>我猜你有一个目录,它包含了单个源C++程序(例如每个程序都有一个C++源文件),名为<代码> .CPP < /C>(例如:代码> Fo.CPP < /C>和<代码> bar。CPP < /代码>每个独立编译为可执行文件(例如,
foo
&
bar
)。对于GNU
make
,您可以尝试以下(未测试的)
Makefile

CXX= g++
CXXFLAGS= -Wall -Wextra -g -O
RM= rm -vf

SOURCES= $(wildcard *.cpp)
BINARIES= $(patsubst %.cpp, %, $(SOURCES))

.PHONY: all clean

all: $(BINARIES)

clean:
     $(RM) *~ *.o $(BINARIES)
阅读并尝试
make-p
查找内置规则。另请参见
Makefile
-s:&

相反,如果您希望从所有
*.cpp
文件(如
foo.cpp
bar.cpp
等)中获得一个可执行文件
myprogram
,您仍然可以在
Makefile
中使用
$(通配符*.cpp)
(最好不要命名
a.out
您的可执行文件,而是有意义的文件),类似这样的东西(除了上面的
cxflags=
这样的普通东西之外):

在所有情况下,使用
$(通配符*.cpp)
就足以在源列表中拥有一个足够通用的
Makefile
。您可能希望生成一些头文件的自动依赖项(使用
gcc-M
things),请参阅

<>注意,您可能有一些C++源代码或头文件,用其他方法生成(例如,您自己的代码> AWK<代码> >或<代码> Python < /C>脚本,或者<代码> yTimeTopel.C< <代码>文件>代码>日期>代码>,或由GNU或其他代码生成器生成的一些C++文件…..然后,您需要将特定规则添加到
Makefile


所以在实践中,我不相信完全通用的构建文件,但我试图向您展示
Makefile
几乎可以是通用的和简短的。在某些时候,您将根据您的特殊需要对其进行调整。

关于SCON:
程序(Glob(“*.cpp”)
将从目录中的所有*.cpp文件生成可执行文件。一般来说,SCons只是一个Python扩展,因此您可以在构建系统中使用Python强大功能。@Nevermore:谢谢,它回答了我的问题。
g++ -Wall *.cpp
CXX= g++
CXXFLAGS= -Wall -Wextra -g -O
RM= rm -vf

SOURCES= $(wildcard *.cpp)
BINARIES= $(patsubst %.cpp, %, $(SOURCES))

.PHONY: all clean

all: $(BINARIES)

clean:
     $(RM) *~ *.o $(BINARIES)
SOURCES= $(wildcard *.cpp)
OBJECTS= $(patsubst %.cpp, %.o, $(SOURCES))
all: myprogram
myprogram: $(OBJECTS)
    $(LINK.cc) $^ -o $@ $(LIBES)