我在尋找幫助讓我的Makefile做我想做的事情。如何將一個值傳遞給Make,將其傳遞給C代碼
我想通了如何預處理代碼添加到我的C源代碼編譯只有當我編譯調試:
#if DEBUG
printf("main()\n");
{
/* Pauses execution so gdb can attach. */
int i=9;
pid_t PID;
char hostname[256];
gethostname(hostname, sizeof(hostname));
printf("PID %d on %s ready for attach.\n", PID=getpid(), hostname);
fflush(stdout);
while (i>0) {
sleep(5);
i--;
}
}
#endif
我也想通了,如果我添加-DDEBUG=1
我的編譯聲明,上面的代碼將被編譯(否則不會被編譯)。
接下來,我想將一個標誌傳遞給我的Makefile,它將包含或不包含-D
選項。目前,我有兩條獨立的編譯線,我會酌情評論和取消註釋。這是我的Makefile(我從別人身上繼承而來,難以理解)。看到說CFLAGS
行:
SHELL = /bin/sh
prefix = /home/schwarz/sundials/instdir
exec_prefix = ${prefix}
includedir = ${prefix}/include
libdir = ${exec_prefix}/lib
CPP = cc -E
CPPFLAGS =
CC = cc
# CFLAGS = -Wall -g
CFLAGS = -Wall -g -DDEBUG=1
# CFLAGS = -g -O2
LDFLAGS =
LIBS = -lm
MPICC = /usr/local/mpi/bin/mpicc
MPI_INC_DIR = /usr/local/mpi/bin/../include
MPI_LIB_DIR = /usr/local/mpi/bin/../lib
MPI_LIBS =
MPI_FLAGS =
INCLUDES = -I${includedir} -I${MPI_INC_DIR}
LIBRARIES = -lsundials_cvode -lsundials_nvecparallel ${LIBS}
LIBRARIES_BL =
EXAMPLES = FPU # cvAdvDiff_non_p cvDiurnal_kry_bbd_p cvDiurnal_kry_p
OBJECTS = ${EXAMPLES:=.o}
# -----------------------------------------------------------------------------------------
.SUFFIXES : .o .c
.c.o :
${MPICC} ${CPPFLAGS} ${CFLAGS} ${MPI_FLAGS} ${INCLUDES} -c $<
# -----------------------------------------------------------------------------------------
all: ${OBJECTS}
@for i in ${EXAMPLES} ; do \
echo "${MPICC} -o $${i} $${i}.o ${MPI_FLAGS} ${CFLAGS} ${LDFLAGS} -L${libdir} ${LIBRARIES} -L${MPI_LIB_DIR} ${MPI_LIBS} ${LIBRARIES_BL}" ; \
${MPICC} -o $${i} $${i}.o ${MPI_FLAGS} ${CFLAGS} ${LDFLAGS} -L${libdir} ${LIBRARIES} -L${MPI_LIB_DIR} ${MPI_LIBS} ${LIBRARIES_BL}; \
done
clean:
rm -f ${OBJECTS}
rm -f ${EXAMPLES}
我已經在網上搜索 - 我發誓! - 但無法弄清楚如何將參數傳遞給makefile。 如何設置我的Makefile,以便爲不同的編譯需求執行不同類型的相同代碼的編譯?更好的是,如果我可以將特定值傳遞給Makefile,該Makefile會將特定值傳遞給編譯,我可以使用它來在代碼中初始化i
。 (IOW,我編譯爲make 8
,C編譯爲int i=8;
)。 Make有甚麼可能?
順便說一下,我已經閱讀了有關Makefiles以及它們如何使用標籤(冒號)列出文件以及依賴關係的工作方式。但我不明白這個Makefile是如何工作的或者它爲什麼會發出兩個編譯語句。所以簡單的解釋也會有幫助。
你讀過手冊中的[本節](http://sunsite.ualberta.ca/Documentation/Gnu/make-3.79/html_chapter/make_7.html)?另外,儘可能不要使用'='並且更喜歡':='。 –
@KerrekSB良好的鏈接,但不是很多的例子。我仍然需要如何將價值傳遞給make。謝謝。 – Jeff