首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为C编译器编写MakeFile,得到"no input files“致命错误

为C编译器编写Makefile,得到"no input files"致命错误,可能是由于Makefile中没有正确指定源文件导致的。Makefile是用于自动化构建和编译程序的脚本文件,它包含了编译器的命令和编译规则。

要解决这个错误,首先需要检查Makefile中的源文件指定是否正确。确保Makefile中指定了正确的源文件路径和文件名,并且文件存在于指定的路径中。

另外,还需要检查Makefile中的编译规则是否正确。编译规则通常包括目标文件、依赖文件和编译命令。确保Makefile中的编译规则正确匹配源文件,并且编译命令正确。

以下是一个示例的Makefile,用于编译名为"main.c"的源文件:

代码语言:txt
复制
CC = gcc
CFLAGS = -Wall -g

all: main

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

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

clean:
    rm -f main main.o

在这个示例中,Makefile定义了一个变量CC表示编译器,CFLAGS表示编译选项。目标"all"表示默认构建目标,依赖于目标"main"。目标"main"依赖于目标"main.o",并通过编译命令将目标文件链接成可执行文件。目标"main.o"依赖于源文件"main.c",并通过编译命令生成目标文件。目标"clean"用于清理生成的文件。

使用该Makefile进行编译时,可以执行以下命令:

代码语言:txt
复制
make

如果Makefile中的源文件路径和文件名正确,并且编译规则正确,就可以成功编译并生成可执行文件。如果仍然出现"no input files"错误,请检查Makefile中的路径和文件名是否正确,并确保源文件存在于指定的路径中。

腾讯云提供了云服务器(CVM)和云函数(SCF)等产品,用于支持云计算和应用部署。您可以通过以下链接了解更多相关产品和详细信息:

  • 腾讯云服务器(CVM):https://cloud.tencent.com/product/cvm
  • 腾讯云函数(SCF):https://cloud.tencent.com/product/scf
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

第二十四章 : 编译程序

最早的计算机程序就是用这种数值编码写成的,这可能就解释了为什么编写它们的程序员据说吸很多烟,喝大量咖啡,并带着厚厚的眼镜。随着汇编语言的出现,这个问题得到克服。...大多数现代系统编写的程序,要么用 C 编写,要么是用 C++ 编写。在随后的例子中,我们将编写一个 C 程序。...用高级语言编写的程序,经过另一个称为编译器的程序的处理,会转换成机器语言。一些编译器把高级指令翻译成汇编语言,然后使用一个汇编器完成翻译成机器语言的最后阶段。...当它读取 diction.c 中的源码的时候,这行代码指示编译器去读取文件 getopt.h, 的是“知道” getopt.c 中的内容。...Makefile 是一个普通文本文件,所以我们能查看它: [me@linuxbox diction-1.11]$ less Makefile The make program takes as input

23510

【Linux】《how linux work》第十五章 开发工具

了解如何运行C编程语言编译器可以让您对在Linux系统上看到的程序的起源有很大的了解。 大多数Linux实用程序和许多Linux系统上的应用程序的源代码都是用CC++编写的。...C程序遵循传统的开发过程:您编写程序,编译它们,然后运行它们。 也就是说,当您编写一个C程序并希望运行它时,您必须将您编写的源代码编译成计算机理解的二进制低级形式。...你可以根据以下行运行 C 编译器(其中 (CC) 展开编译器名称): $(CC) -o myprog $(OBJS) The whitespace before $(CC) is a tab....这样的错误意味着 Makefile 有问题。制表符是分隔符,如果没有分隔符或有其他干扰,你会看到这个错误。...;如果你的程序需要一个库或特殊的包含目录,你应该编写一个Makefile

9110

Linux 开发 | 学习 Makefile

Make 通过 Makefile 获取如何编译、链接和安装清理工程的信息。 本文记录如何为自己的工程编写一个Makefile,主要参考 GNU Make Manual。获取详细信息请直接阅读手册。...所以可以写第一个 Makefile: hello: hello.c gcc -o hello hello.c 然后直接在目录下输入make,就可以得到 hello。...但是对于一个文件包含什么头文件,对应修改 Makefile,这样是很难维护的。 C/C++ 编译器 -MM 功能可以自动找寻文件的包含 ,生成依赖关系。...上面的命令,每个[.d] 文件依赖对应的[.c]文件,具体说明下执行命令的作用: $@ $* 和 $< 是自动变量 rm -f $@ 删除旧的目标文件 借助编译器(-MM)每个源文件生成依赖关系并保存到对应的...比如,$@ 是 src/input.c,那么$(@D) 的值 src ,$(@F) 的值 input.c

5.4K10

Linux嵌入式开发——C编程

文章目录 Linux嵌入式开发——C编程 一、编写C程序 1.1、设置vim编辑器 1.2、编写C程序 二、编译C程序 三、make工具和Makefile文件 3.1、编写C程序 C文件 H文件 3.2...、不使用make工具 3.3、使用make工具和Makefile文件编译 Linux嵌入式开发——C编程 一、编写C程序 我们目前就是使用VIM编辑器编写程序,当然,也可以使用vscode,但是vscode...\r\n"); return 0; } 二、编译C程序 编译的话,我们是使用gcc编译器去编译C程序。...具体操作如下所示: -c:只编译不链接可执行文件,编译器将输入的.c 文件编译为.o 的目标文件。...(具体语法后面会介绍) # 要得到main目标,需要main.o input.o calcu.o,需要执行 # gcc -o main main.o input.o calcu.o命令,后面的都是这样的

4.7K20

使用VisualGDB开发Keil MDK-ARM项目

选择“导入项目”和“生成Makefile”选项: ? 在下一页选择ARM工具链,然后选择“手动指定标志”,现在标志空: ? 指定包含Keil项目的目录。...这些选项不兼容gcc,并且会产生智能感知错误。 “-c”和“-o”等指定文件名的选项。它们是由Makefile自动添加的。 下表对示例uVision项目的选项进行了分类: ?...打开源文件,确保没有智能感知错误,语法着色工作正常: ? 现在,我们将更改Makefile,以使用Keil编译器而不是GCC,并提供特定于Keil的标志。打开mcu.mak文件: ?...) -c $< -o $@ --depend $(@:.o=.dep) 如果你现在构建你的项目,你将会得到几个错误关于丢失的HAL符号: ?...如果您现在构建项目,Visual Studio将正确显示错误和警告: ? 如果您正在使用VisualGDB和Keil编译器,请在论坛中告诉我们。

2.3K30

【Linux】《how linux work》第十六章 从 C 源代码编译软件入门

另一个至少同等重要的原因是,在整个Unix社区广泛分发源代码鼓励用户软件贡献错误修复和新功能,赋予了开源这个词以意义。...如果你理解编译器错误编译器警告、链接器错误以及共享库问题的区别,就不会在构建软件时遇到太多麻烦。本节涵盖了一些常见问题。...通常你可以通过查看直接在编译器错误消息之后出现的make错误来快速找到错误。...以下是一些您可能会遇到的常见构建错误problem Compiler error message: (编译器错误信息)src.c:22: conflicting types for 'item' /usr...编译器在 src.c 上运行了 C 预处理器,但找不到 pkg.h 包含文件。源代码可能依赖于一个你需要安装的库,或者你可能只需要为编译器提供非标准的包含路径。

8310

快速上手和使用makefile

因此,makefile出现了。改动或者编写完代码,只需要简单的make一下就行了。makefile原理是什么?其实就是文件前后的依赖关系。...在windows下的IDE编程,很少听说这个东西,实际上是IDE环境自动给你做了这个工作而已,不需要你手动去编写了。...对于后者,通常是你需要告诉编译器头文件的所在位置(头文件中应该只是声明,而定义应该放在C/C++文件中),只要所有的语法正确,编译器就可以编译出中间目标文件。...而在链接程序时,链接器会在所有的Object File中找寻函数的实现,如果找不到,那到就会报链接错误码(Linker Error),在VC下,这种错误一般是:Link 2001错误,意思说是说,链接器未能找到函数的实现...uart_helloworld.o isr.o 生成执行文件: arm-elf-objcopy -O binary helloworld.out helloworld.bin 更近一步,可以把这些命令写入文件,命令makefile

1.4K20

什么是makefile(3)

Makefile中只有行注释,和UNIX的Shell脚本一样,其注释是用“#”字符,这个就像C/C++中的“//”一样。...在这三个文件名中,最好使用“Makefile”这个文件名,因为,这个文件名第一个字符大写,这样有一种显目的感觉。最好不要用“GNUmakefile”,这个文件是GNU的make识别的。...如果有文件没有找到的话,make会生成一条警告信息,但不会马上出现致命错误。...它会继续载入其它的文件,一旦完成makefile的读取,make会再重试这些没有找到,或是不能读取的文件,如果还是不行,make才会出现一条致命信息。...这个变量中的值是其它的Makefile,用空格分隔。只是,它和include不同的是,从这个环境变中引入的Makefile的“目标”不会起作用,如果环境变量中定义的文件发现错误,make也会不理。

56020

全网最牛Linux内核Makefile系统文件详解(纯文字代码)

如果有文件没有找到的话,make会生成一条警告信息,但不会马上出现致命错误。...它会继续载入其它的文件,一旦完成makefile的读取,make会再重试这些没有找到,或是不能读取的文件,如果还是不行,make才会出现一条致命信息。...: main.o: main.c defs.h 那么,编译器的这个功能如何与我们的Makefile联系在一起呢。...GNU组织建议把编译器每一个源 文件的自动生成的依赖关系放到一个文件中,每一个“name.c”的文件都生成一个“name.d”的Makefile文件,[.d]文件中就存放对应[.c]文件的依赖关系。...$(foo) 展开后得到: prog.o : prog.c cc -c prog.c 当然,千万不要在你的Makefile中这样干,这里只是举个例子来表明Makefile中的变量在使用处展开的真实样子。

3.2K20

跟我一起写 Makefile(一)

在这篇文档中,将以C/C++的源码作为我们基础,所以必然涉及一些关于C/C++的编译的知识,相关于这方面的内容,还请各位查看相关的编译器的文档。这里所默认的编译器是UNIX下的GCC和CC。...对于后者,通常是你需要告诉编译器头文件的所在位置(头文件中应该只是声明,而定义应该放在C/C++文件中),只要所有的语法正确,编译器就可以编译出中间目标文件。...而在链接程序时,链接器会在所有的Object File中找寻函数的实现,如果找不到,那到就会报链接错误码(Linker Error),在VC下,这种错误一般是:Link 2001错误,意思说是说,链接器未能找到函数的实现...c insert.c search.o : search.c defs.h buffer.h cc -c search.c files.o : files.c defs.h...这样比较便于Makefile的易读。我们可以把这个内容保存在文件Makefile”或“makefile”的文件中,然后在该目录下直接输入命令“make”就可以生成执行文件edit。

27410
领券