makefile编译c语言
‘壹’ c语言编译运行出现Makefile.win已经改变,怎么改
这个提示是说你当前项目里有多个文件里都有叫main的函数,这样会导致系统不清楚从哪个main执行,建议你可以把其它文件里的main随便改下下名字比如叫main1什么的,只把你当前要运行的文件里的主函数改为main就行了。
或者建议如果只有一般的测试代码只有一个文件的那种,新建的时候就不要建项目,直接建文件就可以了。
‘贰’ linux下的一个c语言程序代码写在4个源文件中,编写一个makefile用于程序编译
摘要 CC = gcc
‘叁’ 怎么用c4droid的Makefile编译C语言程序
直接写C程序就可以
C++的编译器,默认是可以编C语言的
所以直接写纯C风格的代码,可以编译运行的。
‘肆’ 大家来帮我看看怎样写一个这样的Makefile文件,通过Makefile文件编译这个多文件的C语言程序
以下是一个最简单的多文件+makefile的形式
编译采用gcc 你可以修改成你的编译器
三个文件 main.c func.c makefile
main.c
#include<stdio.h>
externvoidfunc();//这个应该放在头文件中的比如func.h简单起见就直接声明了
intmain()
{
func();
}
func.c
#include<stdio.h>
voidfunc()
{
printf("helloworld ");
}
makefile
.PHONY:allmain.ofunc.o
all:main.ofunc.o
@gccmain.ofunc.o-oout
main.o:main.c
@gcc-cmain.c-omain.o
func.o:func.c
@gcc-cfunc.c-ofunc.o
所有的都是最简单的
‘伍’ ubuntu下gcc编译c语言文件makefile的问题
makefile看起来没什么大问题,你出现的问题是gcc没找到
可以现在shell下面打一个gcc看看,或者gcc --version
确认下是否已经正确安装gcc,且已经把gcc添加到了PATH里面。
‘陆’ c语言 怎么makefile
my_run_filename: main.o set1.o set2.o set3.o
gcc -o my_run_filename main.o set1.o set2.o set3.o
main.o: main.c
gcc -c main.c
set1.o: set1.c
gcc - c set1.c
set2.o: set2.c
gcc -c set2.c
set3.o:set3.c
gcc -c set3.c
虽然我以前也使用过 make 命令对 makefile 文件进行多个源文件进行编译、链接,但是由于我已经很多年不编写 C 语言程序了,所以也不敢说我写的就完全正确。但是该 makefile的基本思路我可以给你解释一下:
my_run_filename: main.o set1.o set2.o set3.o
gcc -o my_run_filename main.o set1.o set2.o set3.o
my_run_filename 是最终生成的可执行程序名,它依赖于四个中间文件(以 *.o 为结尾):main.o set1.o set2.o set3.o
生成该最终可执行的程序名的命令是:gcc -o my_run_filename main.o set1.o set2.o set3.o
main.o: main.c
gcc -c main.c
main.o 这个中间文件依赖于 main.c 源程序,其中:gcc -c main.c 代表只编译、不链接。
gcc 的 -c 选项表示只产生 main.o 文件,等待所有模块单独编译通过了之后,再和别的一起进行链接。
其它 set1、set2、set3 同理。
虽然我知道 makefile 的大致思路,但是给我印象最深的就是:make 工具 对 makefile 文本文件的书写规则是相当苛刻的,你可能还需要花费较多的时间进行 make 调试。
‘柒’ DEV-C++中c语言的文件编译 的时候自动生成了一个makefile.win的文件而且编译器在该文件中报错。
这不是在make文件中报错的,调试报错信息需要从最开头开始查看,你的main.c文件中有3个未定义的引用。分别是:initwindows、beginpaint、endpaint.还有一个指针没有初始化指向了0x0地址。所以程序编译被错误中断了,没有生成exe文件,所以make文件在执行exe文件时找不到目标。上面缺少的那些引用应该是用来绘制窗体的函数,应该是位于哪个系统头文件中,你的代码中应该是没有添加相应的头文件引用才导致上述问题的。另外,指针在使用之前一定要初始化,通过函数赋值以后一定要判断是否赋值正确(一般判断是否为NULL)
‘捌’ 谁能详细地说明一下怎么在mac自己写c语言的程序吗用makefile编译,用终端运行的那种
makefile里面所写的内容其实就是你要编译的命令,那么,什么是编译命令呢?
假写你已经写好一个程序代码,并将之存在一个.c文件中,如:hello.c,在终端上你可以这样做!在终端上输入gcc -o hello hello.c
然后回车,看一看有没有什么反映,如果没有打出很多英文的话,恭喜你!你完美地完成了第一步!然后,在终端中输入./hello 看看是不是有什么输出了?
现在来解释一下编译命令:上面的命令的意思就是,使用gcc编译器编译hello.c源代码,生成的文件名称叫做hello.最后,要看程序运行结果,就要运行生成的程序也就是“./hello”了,“./”的意思就是在当前的目录下运行。
而makefile中内容的就是上面的编译命令,如:在makefile文件中写入
Hello:hello.c
gcc -o Hello hello.c
保存文件之后直接在终端中输入make,就完成编译了!makefile存在的意义只是让编译更加方便,也就说,可以把所以的编译都写在一个makefile文件中,然后在终端中输入make就可以完成makefile文件里的命令!
建议还是先将C语言入门,然后再学使用makefile编译程序吧!因为刚开始的时候不用编译很多文件,如果一个文件要编写一个makefile文件的话,那岂不是很繁?
‘玖’ 编写一个简单的 makefile 文件
makefile文件里面主要有三种内容:
1.变量声明:
变量声明就是一种基本的严格字符替换的操作。
比如在前面声明了:objects=program.o foo.o utils.o
那么在后面出现的所有$(objects)或者${objects}都会被自动替换成上面的那个字符序列,而且是严格替换,即不带空格的。
2.映射法则
3.命令:
映射法则和命令通常都是联合起来组成这样的结构形式:
target... : prerequisites..
command
可以简单地理解为通过prerequisites,也就是先决的依赖文件,采取后面描述的相应的命令(这里的命令都是linux里的shell命令)command之后(一般是)生成了文件target。命令的前面都要按以下tab建留一段空白来表示它是命令。
有的target后面并没有先决条件,也就是后面的命令是无条件执行的。
makefile 文件c语言程序:
#include <linux/init.h>
#include <linux/mole.h>
MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
{
printk(KERN_ALERT "Hello, world\n");
return 0;
}
static void hello_exit(void)
{
printk(KERN_ALERT "Goodbye, cruel world\n");
}
mole_init(hello_init);
mole_exit(hello_exit);
makefile:
# If KERNELRELEASE is defined, we've been invoked from the
# kernel build system and can use its language.
ifneq ($(KERNELRELEASE),)
obj-m := hello.o
# Otherwise we were called directly from the command
# line; invoke the kernel build system.
else
KERNELDIR ?= /lib/moles/$(shell uname -r)/build
PWD := $(shell pwd)
default:
$(MAKE) -C $(KERNELDIR) M=$(PWD) moles
endif