我注意到,使用相对路径来包含是不好的做法.

为什么这被认为是不良做法?

如何将其从代码中删除?没有它,它就无法编译.

这些是我的包含声明:

#include "../include/file.h"
#include "../include/parse.h"

我的头文件位于include目录中,.c个文件位于src目录中:

这是我的Makeline,它位于我项目的主目录中:

TARGET := bin/final
SRC := $(wildcard src/*.c)
OBJ := $(patsubst src/%*.c, obj/*.c, $(SRC))

default: $(TARGET)

clean:
    rm -f obj/*.o
    rm -f bin/*

$(TARGET): $(OBJ)
    gcc -o $@ $?

obj/%.o : src/%.c
    gcc -c $< -o $@ -Iinclude

我是C新手,正在使用makefile.

推荐答案

您的makfile中设置了OBJ个错误:

OBJ := $(patsubst src/%*.c, obj/*.c, $(SRC))

首先,替换中不需要*,因为%会捕获剩余的字符. 其次,结果字符串中有.c而不是.o.

将上面更改为:

OBJ := $(patsubst src/%.c, obj/%.o, $(SRC))

C++相关问答推荐

获取二维数组的最大元素

问关于C中的指针和数组

为什么这个C程序代码会产生以下结果?

从内联程序集调用Rust函数和调用约定

如何将字符串传递给函数并返回在C中更改的相同字符串?

双指针指向常量双指针的指针类型赋值不兼容

非正规化边缘毛刺

`#if`条件中是否允许`sizeof`?

X64:并发写入布尔数组

在创建动态泛型数组时,通过realloc对故障进行分段

为什么我的Hello World EFI程序构建不正确?

如何在C-函数中混合使用C代码和ASM?

用C++构建和使用DLL的困惑

为什么Linux无法映射这个PT_LOAD ELF段?

错误:字符串在C中获得意外输出

某些EAX值的不同调用方的CPUID结果不一致

OMP并行嵌套循环

从文件到链表读取日期

为什么<到达*时不会转换为>?

clion.我无法理解 Clion 中发生的 scanf 错误