Официальный форум СВД Встраиваемые Системы
28 Март, 2024, 23:54:36 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
 
 
 Сайт СВД ВС  Начало   Помощь Поиск Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: С++0x - добавление флага в makefile  (Прочитано 4016 раз)
ad
Пользователь

Сообщений: 70


« : 28 Март, 2014, 21:53:01 »

Хотелось бы, чтобы можно было использовать новый стандарт C++0x. Для этого необходимо добавить следующую строчку в makefile:
Код:
-std=c++0x
Вопрос: а куда именно ее добавлять? Я использую стандартные makefile, что создал мне IDE QNX Momentics. Следующего вида:
Makefile:
Код:
LIST=CPU
ifndef QRECURSE
QRECURSE=recurse.mk
ifdef QCONFIG
QRDIR=$(dir $(QCONFIG))
endif
endif
include $(QRDIR)$(QRECURSE)
common.mk:
Код:
# This is an automatically generated record.
# The area between QNX Internal Start and QNX Internal End is controlled by
# the QNX IDE properties.

ifndef QCONFIG
QCONFIG=qconfig.mk
endif
include $(QCONFIG)

USEFILE=

# Next lines are for C++ projects only
EXTRA_SUFFIXES+=cxx cpp
LDFLAGS+=-lang-c++
VFLAG_g=-gstabs+

OPTLIBS=$(PROJECT_ROOT)/Libraries

#===== USEFILE - the file containing the usage message for the application.
USEFILE=

#===== CCFLAGS - add the flags to the C++ compiler command line.
CCFLAGS_r+=-O3

#===== LDFLAGS - add the flags to the linker command line.
LDFLAGS_r+=-Wl,-S

#===== EXTRA_LIBVPATH - a space-separated list of directories to search for library files.
EXTRA_LIBVPATH+=$(OPTLIBS)/$(CPU)/$(patsubst o%,a%,$(notdir $(CURDIR)))

#===== LIBS - a space-separated list of library items to be included in the link.
LIBS+=-Bstatic ^logger ^pulsar_socket ^pulsar -Bdynamic menu panel ncurses socket

include $(MKFILES_ROOT)/qmacros.mk
ifndef QNX_INTERNAL
QNX_INTERNAL=$(PROJECT_ROOT)/.qnx_internal.mk
endif
include $(QNX_INTERNAL)

include $(MKFILES_ROOT)/qtargets.mk
OPTIMIZE_TYPE_g=none
OPTIMIZE_TYPE=$(OPTIMIZE_TYPE_$(filter g, $(VARIANTS)))
.qnx.internal.mk:
Код:
#VERSION 4.7.0
cpu_variants:=$(if $(filter arm,$(CPU)),v7,$(if $(filter ppc,$(CPU)),spe))

ifeq ($(filter g, $(VARIANT_LIST)),g)
DEBUG_SUFFIX=_g
LIB_SUFFIX=_g
else
DEBUG_SUFFIX=$(filter-out $(VARIANT_BUILD_TYPE) le be $(cpu_variants),$(VARIANT_LIST))
ifeq ($(DEBUG_SUFFIX),)
DEBUG_SUFFIX=_r
else
DEBUG_SUFFIX:=_$(DEBUG_SUFFIX)
endif
endif

CPU_VARIANT:=$(CPUDIR)$(subst $(space),,$(foreach v,$(filter $(cpu_variants),$(VARIANT_LIST)),_$(v)))

EXPRESSION = $(firstword $(foreach a, $(1)_$(CPU_VARIANT)$(DEBUG_SUFFIX)  $(1)$(DEBUG_SUFFIX) \
$(1)_$(CPU_VARIANT) $(1), $(if $($(a)),$(a),)))
MERGE_EXPRESSION= $(foreach a, $(1)_$(CPU_VARIANT)$(2)$(DEBUG_SUFFIX) $(1)$(2)$(DEBUG_SUFFIX) \
$(1)_$(CPU_VARIANT)$(2) $(1)$(2) , $($(a)))

FIX_LIB_SUFFIXES=  \
 $(if $(1),  \
    $(if $(filter $(1), -Bstatic -Bdynamic),\
      $(1) \
      $(if $(2),\
        $(call FIX_LIB_SUFFIXES,\
            $(firstword $(2)),$(wordlist 2,$(words $(2)), $(2)),$(1))),\
      $(if $(filter -Bstatic,$(3) ),\
        $($(1):%.so,%.a),$($(1):%.a,%.so)) \
      $(if $(2),\
        $(call FIX_LIB_SUFFIXES,\
           $(firstword $(2)), $(wordlist 2, $(words $(2)), $(2)), $(3)))))

GCC_VERSION:=$($(call EXPRESSION,GCC_VERSION))
DEFCOMPILER_TYPE:= $($(call EXPRESSION, DEFCOMPILER_TYPE))

EXTRA_LIBVPATH := $(call MERGE_EXPRESSION, EXTRA_LIBVPATH)
extra_incvpath_tmp:=$(call MERGE_EXPRESSION,EXTRA_INCVPATH,)
EXTRA_INCVPATH = $(call MERGE_EXPRESSION,EXTRA_INCVPATH,_@$(basename $@)) \
$(extra_incvpath_tmp)
LATE_SRCVPATH := $(call MERGE_EXPRESSION, EXTRA_SRCVPATH)
EXTRA_OBJS := $($(call EXPRESSION,EXTRA_OBJS))

CCFLAGS_D = $(CCFLAGS$(DEBUG_SUFFIX)) $(CCFLAGS_$(CPU_VARIANT)$(DEBUG_SUFFIX)) \
$(CCFLAGS_@$(basename $@)$(DEBUG_SUFFIX))   \
$(CCFLAGS_$(CPU_VARIANT)_@$(basename $@)$(DEBUG_SUFFIX))
LDFLAGS_D = $(LDFLAGS$(DEBUG_SUFFIX)) $(LDFLAGS_$(CPU_VARIANT)$(DEBUG_SUFFIX))

CCFLAGS += $(CCFLAGS_$(CPU_VARIANT))  $(CCFLAGS_@$(basename $@))   \
   $(CCFLAGS_$(CPU_VARIANT)_@$(basename $@))  $(CCFLAGS_D)
LDFLAGS += $(LDFLAGS_$(CPU_VARIANT)) $(LDFLAGS_D)

LIBS:= $(LIBSOPT) $(patsubst %S_g, %_gS, $(foreach token, $($(call EXPRESSION,LIBS)),$(if $(findstring ^, $(token)), $(subst ^,,$(token))$(LIB_SUFFIX), $(token))))
ifdef LIBNAMES
LIBNAMES:= $(subst lib-Bdynamic.a, ,$(subst lib-Bstatic.a, , $(LIBNAMES)))
LIBNAMES := $(call FIX_LIB_SUFFIXES,$(firstword $(LIBNAMES)),$(wordslist 2, $(words $(LIBNAMES))),-Bdynamic)
endif
libopts := $(subst -l-B,-B, $(libopts))
ifneq ($(LIBS),)
EXTRA_DEPS += $(wildcard $(foreach a,$(EXTRA_LIBVPATH),$(a)/*.a))
endif

BUILDNAME:=$($(call EXPRESSION,BUILDNAME))$(if $(suffix $(BUILDNAME)),,$(IMAGE_SUFF_$(BUILD_TYPE)))
BUILDNAME_SAR:= $(patsubst %$(IMAGE_SUFF_$(BUILD_TYPE)),%S.a,$(BUILDNAME))

POST_BUILD:=$($(call EXPRESSION,POST_BUILD))

common.mk у меня слегка изменен (добавлены в компиляцию нужные мне библиотеки), но два других абсолютно идентичны созданным IDE. И я не понимаю, где и как поставить этот флаг? Sad

Ну и попутный вопрос из этой же серии: а как заставить компилятор для C - проектов использовать стандарт C99? То есть где и какой флаг поставить для того, чтобы, к примеру, подобная строка, была валидна для C проекта:
Код:
for(int i=0, n=10; i<10; ++i) { ++n; printf("n = %i\n", n); }
Записан
Олег Большаков
Легенда

Сообщений: 3140



« Ответ #1 : 31 Март, 2014, 10:00:14 »

Вопрос: а куда именно ее добавлять?

Надо добавить следующую строку в common.mk:

Код:
CCFLAGS+=-Wc,-std=c++0x

Если Вы работаете в IDE Momentics, то опции компилятора можно добавить следующим образом:

1. Открыть свойства проекта (Properties).
2. В панели слева выбрать QNX/C++ Project.
3. Открыть вкладку Compiler.
4. В поле Other options вписать необходимые опции. В данном случае — -Wc,-std=c++0x.


По второму вопросу действия аналогичные, только необходимо указать опцию компилятора -Wc,-std=c99.
Записан
Андрей Ивлев
Опытный пользователь

Сообщений: 138



« Ответ #2 : 22 Апрель, 2020, 14:54:46 »

Не стал создавать отдельную тему.
При добавлении опции компилятора -Wc,-std=c99 (как в моментиксе, так и на инструментальной QNX), при вызове ф. geteuid() ругается:
Код:
warning: implicit declaration of function 'geteuid'

Необходимые заголовочные файлы добавлены:
Код:
#include <sys/types.h>
#include <unistd.h>

Нашел решение, путем добавления опции:
Код:
-D_QNX_SOURCE

Можете как-то пояснить? Спасибо.
Записан
Олег Большаков
Легенда

Сообщений: 3140



« Ответ #3 : 23 Апрель, 2020, 00:19:35 »

Лучше бы создали новую тему, кмк. Smiley Попробуйте заменить -Wc,-std=c99 на -Wc,-std=gnu99.
Записан
Игорь Рондарев
Модератор
Опытный пользователь

Сообщений: 281

Сотрудник СВД ВС


WWW
« Ответ #4 : 23 Апрель, 2020, 16:41:33 »

Также принципиальным является то, о какой ОС идёт речь (QNX 6.5.0, QNX 6.5.0 SP1 или ЗОСРВ с учётом редакции).
Записан

Андрей Ивлев
Опытный пользователь

Сообщений: 138



« Ответ #5 : 23 Апрель, 2020, 18:18:32 »

Лучше бы создали новую тему, кмк. Smiley
Roll Eyes

Попробуйте заменить -Wc,-std=c99 на -Wc,-std=gnu99.
-Wc,-std=gnu99 - помогло. Спасибо.

Также принципиальным является то, о какой ОС идёт речь (QNX 6.5.0, QNX 6.5.0 SP1 или ЗОСРВ с учётом редакции).
Извиняюсь, что не указал сразу  Smiley
(щёлкните чтобы показать/скрыть)
(щёлкните чтобы показать/скрыть)
(щёлкните чтобы показать/скрыть)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP © 2002-2020 СВД Встраиваемые Системы.
При использовании материалов сайта ссылка на forum.kpda.ru обязательна.

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines | © Aiwan. Kolobok smiles | Sitemap
Valid XHTML 1.0! Valid CSS!
Сайт СВД ВС

В последний раз google посещал эту страницу 11 Февраль, 2024, 20:33:52