我寻求帮助,让我的Makefile做我想做的事情。
我已经想通了如何预处理代码添加到我的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文件,它会通过一个特定的值来编译,我可以用它来初始化i
的代码。 (IOW,我编译为make 8
和C被编译为int i=8;
任何的,即使可能在做什么呢?
顺便说一句,我读过有关Makefile文件,以及他们如何通过列出与标签(冒号)文件的工作,其次是他们的依赖。 但我不明白这个Makefile是如何工作以及为什么它会发出两条编译语句。 因此,一个简短的解释也将是有益的。