① .mk是什麼格式的文件,用什麼軟體打開
.mk文件是 makefile 文件,makefile定義了一系列的規則來指定,哪些文件需回要先編譯,哪些文件需要後答編譯,哪些文件需要重新編譯,甚至於進行更復雜的功能操作,因為makefile就像一個Shell腳本一樣,其中也可以執行操作系統的命令。
makefile帶來的好處就是——「自動化編譯」,一旦寫好,只需要一個make命令,整個工程完全自動編譯,極大的提高了軟體開發的效率。make是一個命令工具,是一個解釋makefile中指令的命令工具,一般來說,大多數的IDE都有這個命令,比如:Delphi的make,Visual C++的nmake,linux下GNU的make。可見,makefile都成為了一種在工程方面的編譯方法。
② linux中用C語言編寫完模塊後怎麼編寫makefile文件用到什麼命令以什麼格式編寫
vi Makefile #打開vi編輯器
在編輯器里輸入以下內容:
#當只有一個文件需要編譯的時候
finame:filename.c #冒號前面是要編譯成的目標文件(可以任意命名),後面是你編寫的C文件
gcc -o filename filename.c #gcc前面是按Tab製表符
#filename:filename.c 是指filename文件的生成要依賴filename.c文件
#然後換行後按Tab鍵,然後編寫編譯規則
#make命令一般是同時編譯多個文件時才使用,以下是同時編寫多個獨立的C文件
#filename1和鄭鄭filename2……沒有依賴關系
filename1:filename1.c
gcc -o filename1 filename1.c
filename2:filename2.c
gcc -o filename2 filename2.c
#makefile編譯多個需要依賴(互相調用的文件)
main:main.o file1.o file2.o #main是最終要生成的目標文件,後面.o就是需要調用的文件的對象文件
main.o:main.c
gcc -c main.c #生成main.o對象文件,main.c裡面是有主函數的
file1.o:file1.c
gcc -c file1.c
file2.o:file2.c
gcc -c file2.c
#以上差不多就可以用了
#一下是我找的例子
#include "mytool1.h"
void mytool1_print(char *print_str)
{
printf("This is mytool1 print %s\n",print_str);
}
/* mytool2.h */
#ifndef _MYTOOL_2_H
#define _MYTOOL_2_H
void mytool2_print(char *print_str);
#endif
/* mytool2.c */
#include "mytool2.h"
void mytool2_print(char *print_str)
{
printf("This is mytool2 print %s\n",print_str);
}
當然由於這個程序是很短的我們可以這樣來編譯
gcc -c main.c
gcc -c mytool1.c
gcc -c mytool2.c
gcc -o main main.o mytool1.o mytool2.o
這樣的話我們也可以產生main 程序,而且也不時很麻煩.
# 這是上面那個程序的Makefile 文件
main:main.o mytool1.o mytool2.o
gcc -o main main.o mytool1.o mytool2.o
main.o:main.c mytool1.h mytool2.h
gcc -c main.c
mytool1.o:mytool1.c mytool1.h
gcc -c mytool1.c
mytool2.o:mytool2.c mytool2.h
gcc -c mytool2.c
有了這個Makefile 文件,不過我們什麼時候修改了源程序當中的什麼文件,我們只要執行
make 命令,我們的編譯器都只會去編譯和我們修改的文件有關的文件,其它的文件她連理
都不想去理的。
下面我們學習Makefile 是如何編寫的。
在Makefile 中也#開始的行都是注釋行.Makefile 中最重要的是描述文件的依賴關系的說
明.一般的格式是:
target: components
TAB rule
第一行表示的是依賴關系.第二行是規則.
比如說我們上面的那個Makefile 文件的第二行
main:main.o mytool1.o mytool2.o
表示我們的目標(target)main 的依賴喊槐頌對象(components)是main.o mytool1.o mytool2.o
當倚賴的對象在目標修明慧改後修改的話,就要去執行規則一行所指定的命令.就象我們的上
面那個Makefile 第三行所說的一樣要執行 gcc -o main main.o mytool1.o mytool2.o
注意規則一行中的TAB 表示那裡是一個TAB 鍵
③ make命令生成什麼文件
make 命令後跟的文件名是 Makefile 文件,如果你沒有後帶文件名就自動搜索本目錄下名為「Makefile」的文件,這個文件是沒有後綴名的。至於它生成了什麼就看你的 Makefile 文件怎麼描述了。從你所問的內容來看,你需要學習「Makefile 文件的結構」,你就用這引號里的內容作為關鍵詞搜索一下吧,網上有很多材料,你花半小時看看其中一篇估計就可以了。
④ 使用linux編程怎麼寫makefile
Makefile語法基礎
在Linux下,自動化編譯工具是通過make命令來完成的(姿弊一些工具廠商也提供了它們自己的make命令,如gmake等),make命令的基本格式如下:
make
[-f
makefile]
[label]
它可以通過-f參數指定輸入文件,當省略-f參數時,默認輸入文件名為Makefile,由於我們通常不用這個-f參數,往往就用默認的Makefile文件名。
Makefile是一個文本文件,它是基於一定的語法規則的,它的基本執行規則定義如下:
target
:
[prerequisites]
command
target
標簽,模鄭用於標志當前構建的規則,它也可以是文件。
prerequisites
依賴項,在構建該標簽的時候先執行的規則
command
make需要執行的命令。(任意的Shell命令)
注意:Makefile的target是頂格寫的,而Command需要加一個Tab鍵。我這里為了排版看起來舒服點,每一行都多加了一個Tab鍵,如果要使用本文的Makefile示例,請去掉各行的第一個Tab鍵,否則make的時候報錯。
例如,我們編寫一個簡單的Makefile:
clean:
@echo
"clean"
all:
@echo
"all"
當我們直接執行make命令的時候,輸出如下:
tianfang
>
make
clean
tianfang
>
make
all
all
tianfang
>
make
clean
clean
從中我們可以看到:默認情跡碼族況下構建第一個標簽。可以通過在命令行參數中通過參數構建指定標簽。
⑤ 在window下寫mekefile保存為什麼格式
makefile是文本文件,也就是說:和C/C++/JAVA等的源程序一樣,它是沒有特殊格式的純ASCII文件,只有ASCII中回車、換行、空格、製表等基本格式。
任何用來進行無格式文本編輯的軟體都可以打開並編輯它。如Win自帶的記事本、C/C++語言編輯器、UltraEdit等。
makefile是一種腳本,編寫用來建立一定的目標,而該目標一般依賴於另外一些文件的跟新。
⑥ makefile教程
基於 Make 命令教程 - 阮一峰的網路日誌 (ruanyifeng.com) 總結,可以將make看作一個自頂向下的構建工具
在makefile相同目錄下執行 make 可查看效果
makefile文件名默認 Makefile 或 makefile .也可以指定文件: make -f rules.txt 或者 make --file=rules.txt
如果 前置條件 滿足,執行 命令 構建 目標
目標可以是文件,也可以是某個操作的名字
運行 make clean 可以執行這個操作:
如果make檢測到當前目錄中存在clean文件,就不會執行clean操作,因此最好標明clean是個操作
前置條件通常是一組文件名,用空格分割,指定了目標是否重新構建的標准:只要有一個前置文件不存在,或者有過更新(前置文件的修改時間晚於目標文件),目標就需要重新構建
如果當前目錄沒有source.txt,make會首到makefile的下面去尋找有沒有生成source.txt的目標
命令行首默認必須是一個tab鍵!!!,如果測試過程有報錯記得檢查下 ,如果想替換,可用.RECIPEPREFIX替換(對整個文件生效 (The .RECIPEPREFIX is only supported since 3.82
每條命令都在單獨的shell中執行,這些shell沒有關聯,也沒有繼承關系
解決辦法就是通過寫成一行
或者用反斜杠轉義
最後一個辦法是加上 .ONESHELL: 命令 (同上
# 表示注釋
正常情況下,make會列印每條命令,即使注釋也會列印,在命令前面加@可以關閉列印
通配符
用來指定一組符合條件的文件名,與bash類似 * ? [...]
允許對文件名進行模式匹配,匹配符是%
下面的命令將 file1.c 編譯為file1.o
允許使用 = 自定義變數
調用shell變數,需要兩個$$,因為make命令會使$轉義
變數支持引用
為了區分生效時間,分成四類 gnu make - What is the difference between the GNU Makefile variable assignments =, ?=, := and +=? - Stack Overflow
內置變數
$(CC)指向當前編譯器
$(MAKE)指向當前make工具
詳細如表 https://www.gnu.org/software/make/manual/html_node/Implicit-Variables.html
自動變數
https://www.gnu.org/software/make/manual/html_node/Automatic-Variables.html
判斷和循環 與bash相同
函數格式
內置函數
https://www.gnu.org/software/make/manual/html_node/Functions.html