1. 程式人生 > 實用技巧 >Linux中makefile的極為簡單的應用

Linux中makefile的極為簡單的應用

makefile的簡單用法

對於makefile的詳細描述,其實網上已經有很多了,但是一看每個都是那麼複雜,頓時有點望而生畏,所以這裡就真的僅僅是簡單的介紹一下makefile的使用,十分鐘即可瞭解如何編譯簡單的cpp檔案。

makefile的格式:

target:dependency_files ##生成target所需要的所有dependency_files     
	command #注意是一個TAB

例子:

hello.o:hello.c hello.h     
	gcc -c hello.c -o hello.o

在沒有編寫makefile之前可以使用命令gcc *.c -Wall

檢視當前程式碼是否有語法錯誤

head.h:

void print1(); 
void print2();

f1.c:

#include <stdio.h>  
void print1(){     
	printf("Message:f1\n"); 
}

f2.c:

#include <stdio.h>  
void print2(){     
	printf("Message:f2\n"); 
}

main.c:

#include <stdio.h> 
#include "head.h"//呼叫自己寫的標頭檔案用引號  
int main() {         
	print1();         
	print2();          
	printf("end main\n");         
	return 0; 
}

新建makefile檔案並輸入以下內容

test:f1.o f2.o main.o     
	gcc f1.o f2.o main.o -o test 
f2.o:f2.c     
	gcc -c -Wall f2.c -o f2.o# -Wall允許發出gcc所有有用的報警資訊 
f1.o:f1.c     
	gcc -c -Wall f1.c -o f1.o#-c表示只編譯不連結,生成目標檔案“.o” 
main.o:main.c
	gcc -c -Wall main.c -o main.o#-o file表示把輸出檔案輸入到file裡 
clean:  rm *.o test#刪除.o和執行檔案

執行makefile檔案:

$ make 預設生一個檔案 
$ make '目標名' #選擇性的編譯,比如make f1.o就只編譯那一部分

當工程中的檔名和makefile中的目標重名時,就會有偽目標. 執行make命令時會發現提示目標檔案已經是最新將不被執行! 因為make命令只編譯改動的程式碼檔案,而不用完全編譯. 如果想讓makefile中某個命令永遠被執行可以在目標名前加上.PHONY:'目標名'

小插曲:

解決centos共享資料夾消失問題:(要在root視角下)

  1. 一般情況下共享資料夾在/mnt/hgfs資料夾下
  2. 首先前往Linux的/mnt/hgfs檔案下(若沒有就建立一個)
    cd /mnt/hgfs
  3. 檢視是否共享成功
    vmware-hgfsclient
  4. 安裝open-vm-tools並掛載(確保在此之前安裝了VMtools)
    yum install open-vm-tools vmhgfs-fuse .host:/ /mnt/hgfs
  5. over

QT登場

但是呢,大型工程我不用makefile了,因為之前我已經下好了QT並且配置好了環境。嘖嘖,果然,QT就是好用。
接下來借鑑 的文章來介紹一下QT的安裝吧!

如何使用QT呢?
首先開啟需要執行的工程的目錄,只有.cpp和.h檔案,如圖所示:

然後執行Terminal,輸入

qmake -project

此時可以檢視一下目錄,它多了什麼。

然後再輸入
qmake
可再檢視一次目錄
然後輸入
make
此時檢視目錄就會發現,誒?出現了一個沒有後綴的檔案。直接./檔名就能直接執行。

這個test.cpp為輸出當前系統時間:

#include <iostream> 
#include "test.h" 
#include <ctime> 
#include <string>  

using namespace std;  
int main(){  
	time_t timep; 
	time(&timep); 
	char tmp[64]; 
	strftime(tmp,sizeof(tmp),"%Y-%m-%d %H:%M:%S",localtime(&timep)); 
	string time=tmp; 
	cout<<time; 
	return 0;  
}

執行結果為:

另外,在文章裡插個圖片怎麼這麼費勁呢!有道雲筆記也不能直接進行分享。反人類的功能設計!!!再見,浪費時間。