2015-11-27 78 views
1

我在C中編寫了一些函數,我想用Makefile編譯它們。Makefile中的測試命令

在編譯之前,我想創建一個命令,用另一個命令測試它們,然後只有在它們通過測試時才編譯它們。

我一直在思考:我想

tests : 
    gcc tests.c 
all : tests 
    gcc *.c 

編譯tests.c,然後如果他們確定,編譯所有的功能。

我該怎麼做?非常感謝您

回答

1

一般性原則建立realproduct只有經過測試通過:

all: realproduct 

realproduct: | run-tests 

run-tests: tests 
     ./$< 

它是如何工作的?

有一個隱含的規則來編譯tests.ctests可執行文件,它將運行cc tests.c -o tests,您可以用CFLAGSLDFLAGSLDLIBS變量修改。

$<意味着第一依賴,並./是給它的路徑,所以這意味着運行從本地目錄

|放置之前「訂單僅依賴」,這意味着run-tests必須是「製造」 tests可執行之前realproduct,但run-tests不是「buildin」realproduct的一部分。因此,cc realproduct.c -o realproduct將被調用來構建。

因此,簡言之,只要tests.c改變,首先tests將建成,然後./tests會跑了,然後realproduct將建:

$ make 
cc  tests.c -o tests 
./tests 
cc  realproduct.c -o realproduct 

最後,你可以使用https://www.gnu.org/software/make/manual/html_node/Phony-Targets.html以確保一些命令總是跑,不僅在依賴關係發生變化時。