【发布时间】:2015-08-06 13:15:24
【问题描述】:
我正在使用 nmake 来编译使用 makefile 的程序。我正在尝试将 obj (.o) 文件放置在与 C 文件不同的目录中。这是生成文件:
!IFDEF DEBUG
COPT = $(CFLAGS_LIB) $(CDEBUGFLAG) $(LIB_OPTION)
AOPT = $(AFLAGS_LIB) $(ADEBUGFLAG) $(LIB_OPTION)
!ELSE
COPT = $(CFLAGS_LIB) $(CNODBGFLAG) $(LIB_OPTION)
AOPT = $(AFLAGS_LIB) $(ANODBGFLAG) $(LIB_OPTION)
!ENDIF
#################### Collect build files #####################################
CORE_HDRS = \
i_core.h \
i_cver.h \
i_target.h \
i_subbus.h \
v_core.h \
v_ioctl.h \
v_subbus.h \
v_target.h \
volcano6.h
CORE_OBJS = \
$(OBJPATH)/v_activable.$(O) \
v_busoff_int.$(O) \
v_c_act.$(O) \
v_c_con.$(O) \
v_c_dis.$(O) \
v_c_ini.$(O) \
查看 CORE_OBJS 我将 $(OBJDIR) 与第一个目标文件一起使用,而其余的则没有前缀。 问题是 $(OBJPATH)/v_activable.$(O) 根本没有编译。编译其余文件并将 .o 文件放在与 .c 文件相同的目录中。 这是编译代码的代码 makefile 部分。
OBJS = $(CORE_OBJS)
all: __prebuild__ __library__ __postbuild__
__prebuild__:
@echo ----------------------------------------------------------------
@echo "********************* Build started ****************************"
__dispopts__:
@echo '*** Compiler: $(CC)'
@echo "*** Compiler options: $(COPT)"
@echo "*** Assembler options: $(AOPT)"
@echo '*** Archiver: $(AR)'
@echo "*** Archiver options: $(ARFLAGS)"
@echo ----------------------------------------------------------------
@echo "******************** Code generation ***************************"
__postbuild__:
@echo ----------------------------------------------------------------
@echo "********************* Build finished ***************************"
__library__: __dispopts__ $(OBJS)
@echo ----------------------------------------------------------------
@echo "******************** Creating library **************************"
-@$(AR) $(ARFLAGS)
#################### Inference rules #########################################
.c.$(O):
@echo Compiling $<
@$(CC) $(COPT) $<
.$(S).$(O):
@echo Assembling $<
@$(AS) $(AOPT) $<
任何人都可以看看并告诉我到底是什么问题。我试过规则:
$(OBJPATH)/%.o : $(SRC_DIR)/%.c
但 nmake 无法识别此规则。 这是编译器选项
CFLAGS_LIB = -D__FAR_DATA -DUSE_LARGE_IMMEDIATE_FRAME_MASK -CpuHCS12X -Cc -Mb -Wpd -F2 -Rpt -Ot -Onu -Onf -Ol0 -OnB -Onbt -Onca -Oncn -One -OnP -Ont $(SUPPRESSIONS)
CNODBGFLAG = -NoDebugInfo -NoPath
COPT = $(CFLAGS_LIB) $(CNODBGFLAG)
【问题讨论】:
-
NMAKE 通常用于 Window 平台。在 Windows 文件路径上使用“\”符号,命令选项使用“/”符号。在 linux 和 Mac 上,文件路径使用“/”符号,选项通常使用“-”符号。我看到您在路径中使用“/”符号。这在 NMAKE 中是不正常的。也许这是你的问题?
-
感谢您的回答。我同时使用了“/”、“\”。但问题仍然存在。实际上,当我为 obj 文件指定一些路径时,编译器希望源文件位于同一目录中。但我想要不同目录中的源文件和目标文件。
-
您使用的是哪个编译器和汇编器?编译命令不会更改对象文件夹。要更改它,我们需要知道哪些编译器。是 GCC、CL 还是什么?
-
我正在使用来自 diab 5.9.1.6 的编译器
标签: c makefile subdirectory nmake object-files