Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C &引用;“没有制定目标的规则”;尽管规则存在_C_Gcc_Makefile - Fatal编程技术网

C &引用;“没有制定目标的规则”;尽管规则存在

C &引用;“没有制定目标的规则”;尽管规则存在,c,gcc,makefile,C,Gcc,Makefile,我的makefile有一个问题,它说,没有规则生成/bin/exec所需的target/obj/%.o。停止。但据我所知,我有: # define the C compiler to use CC = gcc # define any compile-time flags # add -DDEBUG for debug mode CFLAGS = -Wall # define any directories containing header files INCLUDES = -I/inc

我的makefile有一个问题,它说,
没有规则生成/bin/exec所需的target/obj/%.o。停止。
但据我所知,我有:

# define the C compiler to use
CC = gcc

# define any compile-time flags
# add -DDEBUG for debug mode
CFLAGS = -Wall 

# define any directories containing header files
INCLUDES = -I/includes

# define src folder
SRC_FOLDER = /src

# define src files
SRC = $(wildcard $(SRC_FOLDER)/%.cpp)

# define object folder
OBJ_FOLDER = /obj

# define obj files
OBJ = $(patsubst %.cpp, %.o, $(SRC))

# define binary path
BIN_FOLFER = /bin

# define the executable file 
MAIN = $(BIN_FOLFER)/exec

# compile object files
$(OBJ_FOLDER)/%.o: $(SRC_FOLDER)/%.cpp
    $(CC) $(CFLAGS) $< -o $@

# build
$(MAIN): $(OBJ_FOLDER)/%.o
    $(CC) $(CFLAGS) $^ -o $@

# cleaning 
.PHONY: clean

clean:
    rm -f $(OBJ_FOLDER)/%.o 
#定义要使用的C编译器
CC=gcc
#定义任何编译时标志
#为调试模式添加-DDEBUG
CFLAGS=-Wall
#定义包含头文件的任何目录
INCLUDES=-I/INCLUDES
#定义src文件夹
SRC_文件夹=/SRC
#定义src文件
SRC=$(通配符$(SRC_文件夹)/%.cpp)
#定义对象文件夹
OBJ_文件夹=/OBJ
#定义obj文件
OBJ=$(patsubst%.cpp、%.o、$(SRC))
#定义二进制路径
BIN\u FOLFER=/BIN
#定义可执行文件
MAIN=$(BIN_FOLFER)/exec
#编译对象文件
$(OBJ_文件夹)/%.o:$(SRC_文件夹)/%.cpp
$(CC)$(CFLAGS)$<-o$@
#建造
$(主):$(对象文件夹)/%.o
$(CC)$(CFLAGS)$^-o$@
#清洁
.假冒:干净
清洁:
rm-f$(对象文件夹)/%.o
对于makefile中可能出现的任何重大错误,我深表歉意,这是我的第一个makefile。我做错了什么

它适用于:

SRC = $(wildcard $(SRC_FOLDER)*/*.cpp $(SRC_FOLDER)*.cpp)
OBJ = $(patsubst $(SRC_FOLDER)%.cpp, $(OBJ_FOLDER)%.o, $(SRC))
它的工作原理是:

SRC = $(wildcard $(SRC_FOLDER)*/*.cpp $(SRC_FOLDER)*.cpp)
OBJ = $(patsubst $(SRC_FOLDER)%.cpp, $(OBJ_FOLDER)%.o, $(SRC))
请求
%.o
准确无误。
%
在这里不作为模式,因为它不会出现在规则的两侧。您需要在那里使用
$(OBJ)
变量。但是首先需要修复它,因为您只需要替换扩展名,但也需要替换目录

  • 完成
    $(OBJ)
    变量(正如Lutin已经说过的)(好的,但我对它做了一些修改;我想您只需要目录的直接后代):

  • 修正规则以实际使用
    $(OBJ)
    变量:

    $(MAIN): $(OBJ)
    
  • 哦,您可能不希望从
    /
    开始使用
    SRC_文件夹
    OBJ_文件夹
    BIN_文件夹
    ,因为这会将它们放在文件系统根目录中,而不是项目所在的位置。对于上面的模式,它们也不应该以斜杠结尾

  • 请求
    %.o
    准确无误。
    %
    在这里不作为模式,因为它不会出现在规则的两侧。您需要在那里使用
    $(OBJ)
    变量。但是首先需要修复它,因为您只需要替换扩展名,但也需要替换目录

  • 完成
    $(OBJ)
    变量(正如Lutin已经说过的)(好的,但我对它做了一些修改;我想您只需要目录的直接后代):

  • 修正规则以实际使用
    $(OBJ)
    变量:

    $(MAIN): $(OBJ)
    
  • 哦,您可能不希望从
    /
    开始使用
    SRC_文件夹
    OBJ_文件夹
    BIN_文件夹
    ,因为这会将它们放在文件系统根目录中,而不是项目所在的位置。对于上面的模式,它们也不应该以斜杠结尾


  • @是的,是的。所有目录都存在。我不确定规则的目标是否可以是绝对路径。您需要添加target
    All:$(MAIN)
    ,然后运行
    make
    @alexandrubarbosie如果删除此
    $(OBJ_文件夹)/%,会发生什么情况。o:$(SRC_文件夹)/%。cpp
    规则?@qrdl没有帮助,相同的错误。leeduhem,我也有同样的错误。@leeduhem是的,有。所有目录都存在。我不确定规则的目标是否可以是绝对路径。您需要添加target
    All:$(MAIN)
    ,然后运行
    make
    @alexandrubarbosie如果删除此
    $(OBJ_文件夹)/%,会发生什么情况。o:$(SRC_文件夹)/%。cpp
    规则?@qrdl没有帮助,相同的错误。leeduhem,我也犯了同样的错误。