C Makefile,";没有什么可以为所有人做的”;错误
因此,我有一个make文件,存储在一个名为“temp”的目录中。下面的目录有一个src文件夹,其中包含2.c文件“file1.c”和“file2.c”。temp目录还包含一个include文件夹(为空)和一个bin文件夹(在make命令运行之前为空)。我目前正在尝试编译一个.c文件(让它工作),但是一个文件在这里似乎都不工作 以下是目录的外观:C Makefile,";没有什么可以为所有人做的”;错误,c,gcc,compilation,makefile,C,Gcc,Compilation,Makefile,因此,我有一个make文件,存储在一个名为“temp”的目录中。下面的目录有一个src文件夹,其中包含2.c文件“file1.c”和“file2.c”。temp目录还包含一个include文件夹(为空)和一个bin文件夹(在make命令运行之前为空)。我目前正在尝试编译一个.c文件(让它工作),但是一个文件在这里似乎都不工作 以下是目录的外观: temp 将cd转换成temp bin include Makefile src 这是我的makefile: all: gcc -Wall
temp
将cd转换成temp
bin include Makefile src
这是我的makefile:
all:
gcc -Wall -pedantic -std=c99 src/file1.c -Iinclude -o bin/runMe -lncurses
是的,gcc前面有一个选项卡。如果能在这个令人沮丧的问题上提供任何帮助,我们将不胜感激。此外,如果可能的话,任何关于编译第二个.c文件的输入都将非常有用
无需对目标执行任何操作
表示目标没有命令,在本例中,这几乎肯定意味着您在该gcc
行上没有选项卡
尽管如此,这只是眼前的问题。此makefile也没有遵循良好的实践,将不必要地重新编译您的程序(如果创建了all
文件,则会完全停止工作)
在当前删除的答案中,DrC对如何改进makefile以避免后两个问题提出了非常好的建议
具体而言,您的makefile应该更像这样:
.PHONY: all
all: bin/runMe
bin/runMe: src/file1.c
gcc -Wall -pedantic -std=c99 $^ -Iinclude -o $@ -lncurses
它将
all
目标标记为,以便创建的all
文件或目录不会混淆make,并在源文件上为构建的二进制文件设置一个先决条件,以便make可以判断何时创建(或不创建)需要重新生成二进制文件。无需执行任何操作都不是错误-这意味着自上次编译以来,没有任何新内容需要编译。请在gcc之前再次检查此“选项卡”(使用显示空白的编辑器)您确定编辑器没有将制表符转换为空格吗?请进行检查,以便在~/.nanorc
文件中不设置以下内容:设置制表符空格
DrC:取消删除您的答案。Etan:若并没有制表符,那个么在解析过程中就会丢失分隔符。这个makefile在语法上是合法的,这意味着在gcc
@madscitist之前绝对有一个选项卡,您完全正确。这使得我无法解释最初的输出(除非我认为它不是GNU Make)。