下面針對只有幾個檔案的程式來簡單試驗一下makefile
在這裡要準備四個檔案
/* mytool1.h */
#ifndef _mytool_1_h
#define _mytool_1_h
#include"stdio.h"
void mytool1_print(char *print_str);
#endif
/*mytool1.c*/
#include "mytool1.h"
void mytool1_print(char *print_str)
/* mytool2.h */
#ifndef _mytool_2_h
#define _mytool_2_h
#include"stdio.h"
void mytool2_print(char *print_str);
#endif
/*mytool2.c*/
#include "mytool2.h"
void mytool2_print(char *print_str)
/*main.c*/
#include "mytool1.h"
#include "mytool2.h"
int main(int argc,char **argv)
上面的程式我們可以這樣編譯:
gcc -c mytool1.c
gcc -c mytool2.c
gcc -c main.c
gcc -o main main.o mytool1.o mytool2.o
這樣也可以產生main程式,而且也不時很麻煩.但如果要編譯的檔案很多的話,這種方法就不太適宜了。為此有makefile檔案來幫忙,呵呵,編譯工作就簡單了。
#這是上面那個程式的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 是如何編寫的:
在makefile 中也#開始的行都是注釋行。makefile 中最重要的是描述檔案的依賴關係的說明。
一般的格式是:
target ... : prerequistites ...
command1
command2
例:main: main.o stack.o maze.o
gcc main.o stack.o maze.o -o main
只要有乙個prerequisities更新了,目標也會被更新,就是執行command
makefile
有三個非常有用的變數。分別是$@,$^,$<
代表的意義分別是:
$@ -- 目標檔案,
$^ -- 所有的依賴檔案,
$< -- 第乙個依賴檔案.
如果我們使用上面三個變數,那麼我們可以簡化我們的makefile 檔案為:
1)
#這是簡化後的makefile
main:main.o mytool1.o mytool2.o
gcc -o $@ $^
main.o:main.c mytool1.h mytool2.h
gcc -c $<
mytool1.o:mytool1.c mytool1.h
gcc -c $<
mytool2.o:mytool2.c mytool2.h
gcc -c $<
clean :
-rm main main.o mytool1.o mytool2.o
2)
# 或者使用變數如下:
#/*makefile*/
objects=main.o mytool1.o mytool2.o
main:$(objects)
gcc -o $@ $^
main.o:main.c mytool1.h mytool2.h
gcc -c $<
mytool1.o:mytool1.c mytool1.h
gcc -c $<
mytool2.o:mytool2.c mytool2.h
gcc -c $<
clean :
-rm main $(objects)
經過簡化後我們的makefile 是簡單了一點,不過還可以再簡單一點.這裡我們學習
乙個makefile 的預設規則
..c.o:
gcc -c $<
這個規則表示所有的.o 檔案都是依賴與相應的.c 檔案的.例如mytool1.o 依賴於mytool1.c
這樣makefile 還可以變為:
# 這是再一次簡化後的makefile
objects=main.o mytool1.o mytool2.o
main:$(objects)
gcc -o $@ $^
..c.o:
gcc -c $<
clean :
-rm main $(objects)
補充:
1.
如果把 make 命令是執行 名字為makefile的檔案裡面的命令,make -f 可以執行其他名字的檔案。例如:
有乙個makefile_aandb 檔案,那麼 make -f makefile_aandb 就是把 makefile_aandb 當成makefile。
2. 如果在makefile新增了clean , 那麼,要執行clean的話,是這樣執行, make clean。
主要參考:
HTTP服務端JSON服務端
最後更新日期 2014 5 18 author kagula 內容簡介 cppcms是個開源web開發框架,通過它可以很容易實現http服務和json服務,這裡介紹cppcms開發環境的搭建。寫乙個cppcms測試程式,它建立http服務,向瀏覽器返回hello,world頁面。cppcms依賴的一...
服務端系統
1.高可用 容錯和降級。容錯級別上,忽略次要 error 服務降級 程式中部分error是可以忽略處理的,或者打個日誌標記下,而不用結束整個執行流程。服務降級是指,當依賴的非核心模組出問題時,可以選擇不請求或者熔斷式請求 過載保護 資料可以不吐給客戶端,這就要求對資料或者服務進行級別劃分,優先保證使...
服務端測試
首先服務端的測試包含哪些東西呢?實際上,服務端的測試簡單來說就是除了前端以外的的測試,總的來說可以分為以下兩類 1.web或者的提供業務邏輯的服務端介面測試 介面測試佔據工作工作中的80 介面測試的重點是要檢查資料的交換,傳遞和控制管理過程,以及系統間的相互邏輯依賴關係等。下面粗略的列舉出測試的幾個...