编译和执行c程序的Makefile

编译和执行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

我已经创建了一个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 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}