Я использую nmake, чтобы скомпилировать мою программу, которая использует make-файл. Я пытаюсь загрузить obj (.o) файлы, которые будут размещены в отдельной директории, чем C файлов. Вот Makefile:Makefile, который генерирует файлы obj в подкаталоге в Windows nmake
!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 **************************"
[email protected]$(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, компилятор ожидает, что исходный файл будет в том же каталоге. Но я хочу исходный файл и объектный файл в разных каталогах. – cool
Какой компилятор и ассемблер вы используете? Команды компиляции не изменяют папки объектов. Чтобы изменить его, нам нужно знать, какие компиляторы. Это GCC, CL или что? –