Make
可選擇編譯翻譯單元 makefile
我正在用 c 編寫一個程序,我想根據使用者是否願意編譯一個翻譯單元。基本上我有兩個文件,一個 main.c 應該總是被編譯。此外,我有一個文件,我們稱之為 optional.c。optional.c 中的一些函式比 main.c 中的函式快得多,但它們也更容易出錯。
在我的 main.c 中,我可以編寫如下程式碼
#ifdef USE_OPTIONAL some function call from optional.c #else some function call from main.c #endif
在我的 makefile 中,我還想編譯 optional.c 僅當它應該被使用時,比如說
gcc -c optional.c gcc -c -DUSE_OPTIONAL main.c gcc main.o optional.o
如果沒有,只需
gcc -c main.c gcc main.o
它有兩種不同的規則,一種稱為“all:”,一種稱為“optional:”,但我更喜歡只輸入“make”而不是“make optional”。實現這一點的最簡單方法是什麼?我應該轉向配置腳本和 Makefile.in 還是只有第二條規則更好?是否有可能實現例如“make USE_OPTIONAL=1”,然後讓讀取變數 USE_OPTIONAL 的輸入來弄清楚該怎麼做?
您可以在 Makefiles 中對 C 預處理器指令使用類似的方法,至少如果您使用的是 GNU Make:
ifdef USE_OPTIONAL main.o: CPPFLAGS += -DUSE_OPTIONAL program: main.o optional.o else program: main.o endif
USE_OPTIONAL
有了這個,在呼叫中給定的任何值make
都將導致包含可選功能。如果您想要更具體的測試,您可以使用
ifeq ($(USE_OPTIONAL), 1)
而不是
ifdef
線。那麼你就需要專門make USE_OPTIONAL=1
的 .