编译和执行c程序的Makefile
我已经创建了一个c程序编译和执行c程序的Makefile,c,makefile,C,Makefile,我已经创建了一个c程序test.c,,它可以正确编译和运行,并且已经从同样运行的文件中创建了可执行文件testexec。我正在尝试创建一个make文件,该文件将首先编译test.c,然后在编译后运行testexec。此make文件不会产生任何错误,但它只运行testexec,而不首先编译test.c: all: test.c gcc test.c ./testexec 对于任何代码,通用的makefile如下所示 INCL = add here if any
test.c,
,它可以正确编译和运行,并且已经从同样运行的文件中创建了可执行文件testexec
。我正在尝试创建一个make文件,该文件将首先编译test.c
,然后在编译后运行testexec
。此make文件不会产生任何错误,但它只运行testexec,而不首先编译test.c:
all: test.c
gcc test.c
./testexec
对于任何代码,通用的
makefile
如下所示
INCL = add here if any header file is there
SRC = test.c
OBJ = $(SRC:.c=.o)
EXE = testexec
CC = gcc
CFLAGS = -c
RM = rm -rf
all: testexec
testexec: test.o
gcc -o testexec test.o
test.o: test.c
gcc -c test.c
clean:
$(RM) $(OBJ) $(EXE)
您的编译创建了一个程序
a.out
;您不能执行/testexec
,除非是其他人创建的。@JonathanLeffler是的,我以前运行过一个创建/testexec
的命令。我尝试了gcc test.c testexec
,因此创建的可执行文件将被称为testexec而不是.out,但它仍然不工作。您可以使用-o testexec
创建一个名为testexec
的程序。“这是相当基本的手动攻击。”乔纳坦利弗勒,事实上我知道了!我添加了-o
,因此该行现在是gcc test.c-o testexec
。我认为-o意味着makefile不会重新编译它(根据手册)。你知道为什么它能工作吗?为什么不gcc-o testexec test.c
?那么/testexec
就有意义了。您需要更系统地使用${OBJ}
(或$(OBJ)
)和${SRC}
。