服務端入門《四》(makefile

2021-07-13 22:56:26 字數 3327 閱讀 8737



下面針對只有幾個檔案的程式來簡單試驗一下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 介面測試的重點是要檢查資料的交換,傳遞和控制管理過程,以及系統間的相互邏輯依賴關係等。下面粗略的列舉出測試的幾個...