make:***没有规则将目标文件“ main.c”设为“ main.o”。停止

时间:2019-08-23 16:39:37

标签: c makefile

我的src目录中有3个.c文件,而在src的父目录中有一个Makefile。我所有的c文件都只使用标准头文件。 我在使用make命令时遇到的错误是

  

make:***没有规则将目标文件“ main.c”设置为“ main.o”。停止。

我尝试了人们在这里和那里提到的所有调整,但是无法解决问题。请帮助。

我也尝试包括vpath指令。

Makefile

vpath src
vpath inc
CFLAGS=-I inc
output: main.o helloExec.o execDemo.o
    $(CC) -o $(CFLAGS) $<

main.o: main.c
    $(CC) -c $(CFLAGS) $< $(CFLAGS)
helloExec.o: helloExec.c
    $(CC) -c $(CFLAGS) $< $(CFLAGS)
execDemo.o: execDemo.c
    $(CC) -c $(CFLAGS) $< $(CFLAGS)
clean:
    rm -f *.o output

main.c

#include<stdio.h>

int main()
{
    printf("hello\n");
    return 0;
}

execDemo.c

#include<stdlib.h>
#include<unistd.h>

int main()
{
    printf("execDemo with pid = %d\n", getpid());
    return 0;
}

helloExec.c

#include<stdlib.h>
#include<unistd.h>

int main()
{
    printf("helloExec with pid = %d\n", getpid());
    return 0;
}

2 个答案:

答案 0 :(得分:0)

VPATHvariable

因此,它应该是大写字母,并设置为目录列表:

VPATH=src:inc

答案 1 :(得分:-1)

输出构建行$(CC) -o $(CFLAGS) $<不正确:
-o选项后面是输出(可执行)文件。

CFLAGS=-Iinc

output: main.o helloExec.o execDemo.o
    $(CC) $< -o output

main.o: main.c
    $(CC) -c $(CFLAGS) $< $(CFLAGS)

helloExec.o: helloExec.c
    $(CC) -c $(CFLAGS) $< $(CFLAGS)

execDemo.o: execDemo.c
    $(CC) -c $(CFLAGS) $< $(CFLAGS)

clean:
    rm -f *.o output