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