我錯過了什麼?
足夠的引號,可能。在Unix上,您需要:
HEADER = "../somePath/theHeader.h"
${CC} ${CFLAGS} -DHEADER='${HEADER}' -c file.cpp
宏定義包括雙引號。如果您沒有在單引號中包含-DHEADER
參數,則shell(un)會有用地除去雙引號。通過將它放在單引號內,shell有助於刪除單引號,並留下雙引號,供編譯器查看。
Windows上的命令行處理規則不同,並且引號的處理方式與cmd.exe
處理器的處理方式不同。
順便說一句,我希望把它可行的人類,爲HEADER
在命令行上指定的值,我用:
HEADER = ../somePath/theHeader.h
${CC} ${CFLAGS} -DHEADER='"${HEADER}"' -c file.cpp
現在我可以運行:
make HEADER=/other/path/to/header.h file.o
和有用。如果你想使用一個命令輸出到指定的文件名
make HEADER='"/other/path/to/header.h"' file.o
或類似的東西,這是fiddlier,和雙尷尬:與原來的符號,我不得不寫。與第二次比較的第一個選項:
make HEADER=$(locate header.h)
make HEADER="\"$(locate header.h)\""
或者,你可以使用預處理程序插入引號,這可能是少些麻煩:'#定義字符串化(X)STRINGIFY_(X)'/'#定義STRINGIFY_( x)#x' /'#include STRINGIFY(HEADER)' – rici
這是真的;我不需要使用它,但它應該可以正常工作。而且,正如你所說,它會避免在命令行上引用引號,這很有幫助。 –
@rici你的blurb值得成爲一個答案。 – Olumide