Изменение компилятора для подкаталогов в Eclipse CDT

У меня есть управляемый Eclipse проект make c++, где исходный код находится в нескольких подкаталогах, один из этих каталогов называется «тест». Eclipse автоматически создает make-файлы для каждого подкаталога (Debug/test/subdir.mk), и эта часть прекрасно работает.

Однако, если я изменю компилятор (скажем, icpc вместо gcc) в свойствах проекта, основной make-файл (Debug/makefile) будет изменен для использования нового компилятора, но subdir.mk не изменится. В subdir.mk по-прежнему используется gcc, а в Debug/makefile в качестве команды компилятора используется icpc. Я попытался установить свойства для каждого подкаталога, но у меня все та же проблема.

Я использую Эклипс Марс

Есть ли способ изменить это?

Это Debug/makefile ############################################# ################################### # Автоматически сгенерированный файл. Не редактировать! ################################################### ###############################

-include ../makefile.init
RM := rm -rf

# All of the sources participating in the build are defined here
-include sources.mk
-include test/subdir.mk
-include subdir.mk
-include objects.mk

ifneq ($(MAKECMDGOALS),clean)
ifneq ($(strip $(CC_DEPS)),)
-include $(CC_DEPS)
endif
ifneq ($(strip $(C++_DEPS)),)
-include $(C++_DEPS)
endif
ifneq ($(strip $(C_UPPER_DEPS)),)
-include $(C_UPPER_DEPS)
endif
ifneq ($(strip $(CXX_DEPS)),)
-include $(CXX_DEPS)
endif
ifneq ($(strip $(CPP_DEPS)),)
-include $(CPP_DEPS)
endif
ifneq ($(strip $(C_DEPS)),)
-include $(C_DEPS)
endif
endif

-include ../makefile.defs

# Add inputs and outputs from these tool invocations to the build variables

# All Target
all: TestProject

# Tool invocations
TestProject: $(OBJS) $(USER_OBJS)
        @echo 'Building target: $@'
        @echo 'Invoking: GCC C++ Linker'
        icpc -L<LinkerStuff> -lrt -openmp -inline-forceinline -o "TestProject" $(OBJS) $(USER_OBJS) $(LIBS)
        @echo 'Finished building target: $@'
        @echo ' '

# Other Targets
clean:
        -$(RM) $(CC_DEPS)$(C++_DEPS)$(EXECUTABLES)$(C_UPPER_DEPS)$(CXX_DEPS)$(OBJS)$(CPP_DEPS)$(C_DEPS) TestProject
        -@echo ' '

.PHONY: all clean dependents
.SECONDARY:

-include ../makefile.targets

Вот Debug/test/subdir.mk

################################################################################
# Automatically-generated file. Do not edit!
################################################################################

# Add inputs and outputs from these tool invocations to the build variables
CPP_SRCS += \
../test/TestProject.cpp

OBJS += \
./test/TestProject.o

CPP_DEPS += \
./test/TestProject.d


# Each subdirectory must supply rules for building sources it contributes
test/TestProject.o: ../test/TestProject.cpp
        @echo 'Building file: $<'
        @echo 'Invoking: GCC C++ Compiler'
        icc-I<includes stuff> -O3 -g3 -Wall -c -fmessage-length=0 -openmp -MMD -MP -MF"$(@:%.o=%.d)" -MT"test/TestProject.d" -o "$@" "$<"
        @echo 'Finished building: $<'
        @echo ' '

person Anu    schedule 13.10.2015    source источник
comment
Я попытался ответить на вопрос, но в вашем файле Debug/test/subdir.mk команда выглядит неправильно, несмотря ни на что. icc-I... имеет три проблемы 1. Не gcc, 2. не ipcc 3. нет пробела перед -I. Я предполагаю, что это проблема редактирования, и ответил на вопрос, как если бы он сказал gcc -I...   -  person Jonah Graham    schedule 17.10.2015
comment
Вы правы, я пытался что-то изменить, и с одной попытки я получил файл subdir.mk с icc вместо gcc, но все еще не с icpc. Это после того, как я изменил настройки компилятора и компоновщика   -  person Anu    schedule 21.10.2015
comment
Не уверен, что следую. Звучит как ошибка, если вы набрали icpc в настройках, а icc появилось в make-файле. Если у вас есть воспроизводимый тестовый пример, я уверен, что отчет об ошибках будет приветствоваться. eclipse.org/bugs/enter_bug.cgi?product=CDT   -  person Jonah Graham    schedule 21.10.2015


Ответы (1)


Похоже, вы только изменили команду связывания с gcc на ipcc, а не команду компиляции. Makefile верхнего уровня выполняет компоновку (собирает *.o в exe), где подкаталоги выполняют компиляцию отдельных объектов (компилируют *.c в *.o).

Этот скриншот может помочь. Стрелки указывают на параметры компиляции и связывания сборки:

ссылка

person Jonah Graham    schedule 17.10.2015
comment
Я изменил компилятор и компоновщик. Я также изменил настройки свойств в каждом подкаталоге ДО того, как опубликовал этот вопрос. - person Anu; 21.10.2015