簡體   English   中英

包含文件的預處理器定義

[英]include file with preprocessor define

我想包含一個文件,並對路徑使用預處理器定義。

// in projects preprocessor definitions:    
HEADER="../somePath/theHeader.h"

// in a file
#include HEADER

這在Windows上有效,但是XCode對此抱怨,找不到文件。 用該路徑替換HEADER可以工作,因此該文件實際上存在。 那么,我想念什么?

我想念什么?

足夠的報價,也許。 在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

或類似的東西(比較麻煩),如果要使用命令輸出指定文件名,則麻煩得多。 將第一個選項與第二個選項進行比較:

make HEADER=$(locate header.h)
make HEADER="\"$(locate header.h)\""

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM