我在C中編寫了一些函數,我想用Makefile編譯它們。Makefile中的測試命令
在編譯之前,我想創建一個命令,用另一個命令測試它們,然後只有在它們通過測試時才編譯它們。
我一直在思考:我想
tests :
gcc tests.c
all : tests
gcc *.c
編譯tests.c,然後如果他們確定,編譯所有的功能。
我該怎麼做?非常感謝您
我在C中編寫了一些函數,我想用Makefile編譯它們。Makefile中的測試命令
在編譯之前,我想創建一個命令,用另一個命令測試它們,然後只有在它們通過測試時才編譯它們。
我一直在思考:我想
tests :
gcc tests.c
all : tests
gcc *.c
編譯tests.c,然後如果他們確定,編譯所有的功能。
我該怎麼做?非常感謝您
一般性原則建立realproduct
只有經過測試通過:
all: realproduct
realproduct: | run-tests
run-tests: tests
./$<
它是如何工作的?
有一個隱含的規則來編譯tests.c
到tests
可執行文件,它將運行cc tests.c -o tests
,您可以用CFLAGS
,LDFLAGS
,LDLIBS
變量修改。
$<
意味着第一依賴,並./
是給它的路徑,所以這意味着運行從本地目錄
|
放置之前「訂單僅依賴」,這意味着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以確保一些命令總是跑,不僅在依賴關係發生變化時。