Make

可選擇編譯翻譯單元 makefile

  • May 23, 2022

我正在用 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的 .

引用自:https://unix.stackexchange.com/questions/703532