Форум программистов, компьютерный форум, киберфорум
Наши страницы

Пишем свой интерпретатор языка BASIC - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Меню и список http://www.cyberforum.ru/cpp-beginners/thread41194.html
Здравствуйте форумчане. Помоги пожалуйста в следующем вопросе: У меня есть 2связный список, написано меню. Но в моменте когда написано make a list и delete custom необходимо чтобы выводились:...
C++ Здравствуйте! Не могу поместить class в один файл с программой. file.hpp #include "Cat.hpp" // здесь классы "2)" Cat::Cat(int initialAge) { itsAge = initialAge; } Cat::~Cat() { http://www.cyberforum.ru/cpp-beginners/thread41186.html
Массивы строк C++
Привет всем! Задан массив строк. Как узнать который символ встечаетса найбольшое количество раз в етом массиве?
C++ вывод на экран набор треугольников и квадратов, которые произвольно двигаются и меняют размер
Please, help me!!! Вот текст программы, которая выводит на экран набор треугольников и квадратов, которые произвольно двигаются и меняют размер только квадратов. Проблема в том, что необходимо...
C++ Округление дробного числа до целого в большую сторону. http://www.cyberforum.ru/cpp-beginners/thread41139.html
Доброго дня. Я новичок в программирование на Visual C++. Проблема такая программа должна считать кол-во месяцев, если числа целые то программа шла дальше, если дробное то (например 3.33333) ...
C++ Код из Delphi в C++ Нужно написать курсовую на C++. Сам я в программировании плохо шарю (не программист). Попросил у народу помощи, помогли. Но решение на Delphi: {$APPTYPE CONSOLE} type byteset=set of byte; ... подробнее

Показать сообщение отдельно
#pragma
Временно недоступен
954 / 225 / 6
Регистрация: 12.04.2009
Сообщений: 921
21.03.2010, 22:25  [ТС]
Забавно,буду собирать )
У меня сразу возник вопрос: можно ли максимально упростить структуру файлов?
Я имею в виду то,что мой интерпретатор собирается вместе с GUI по одной команде make (надо только доделать отмену сборки,если есть #define WITHOUT_GUI или подобное)
Мой Makefile выглядит так:
Makefile
Код
#
#
# basin makefile
#
#


# Принятые обозначения: CC - компилятор Си, CXX - компилятор Си++
CXX = g++
CXXFLAGS = -ansi -pedantic -pedantic-errors -Wall -O2 -Os
DFLAGS = -MD
LD = $(CXX)
LDFLAGS = -lSDL
OFILES = Interpreter/debug/error_handler.o \
         Interpreter/main.o \
         Interpreter/lib/lib.o \
         Interpreter/cmd/options.o \
         Interpreter/memory/memory.o \
         \
         Interpreter/frontend/parser.o  \
         Interpreter/frontend/syntax.o \
         \
         Interpreter/intermediate/value.o \
         Interpreter/intermediate/variable.o \
         Interpreter/intermediate/expression.o \
         Interpreter/intermediate/statement.o \
         Interpreter/intermediate/array.o \
         Interpreter/intermediate/label.o \
         \
         Interpreter/runtime/interp.o \
         Interpreter/runtime/function.o \
         Interpreter/runtime/graphics/graphics.o \
         Interpreter/runtime/tracer/tracer.o \
         Interpreter/runtime/pool.o
         
CXXFLAGS += -I. -IInterpreter/runtime -IInterpreter/runtime/graphics  \
-IInterpreter/runtime/tracer -IInterpreter/cmd -IInterpreter/config   \
-IInterpreter/debug -IInterpreter/frontend -IInterpreter/intermediate \
-IInterpreter/lib -IInterpreter/include -IInterpreter/memory          \
-IInterpreter

RM         = rm -f
TARGET     = basin
SUBTARGET  = Basin-IDE
INSTALLDIR = ./compiled
MV         = /bin/mv
LS         = /bin/ls
CURRDIR    = `pwd`
OPT        = *.h *.cpp */*.h */*.cpp
LSFLAGS    = -R $(OPT)
PROGDIR    = ./Interpreter
GUIDIR     = ./GUI/Qt/Basin-IDE
MAKE       = /usr/bin/make
QMAKE      = /usr/bin/qmake
QMKFLAGS   = -project

#`ls -R 'pwd'| sed -r /*.h/*.cpp/`

# По умолчанию прика "make" собирает самую первую цель.
# Обычно её обзывают "all" и уже расписывают, что там должно быть
all: $(TARGET)  $(GUIDIR)/$(SUBTARGET) 

# Линковка из объектников
$(TARGET): $(OFILES)
	$(LD) $(LDFLAGS) $(OFILES) -o $(TARGET) \
	&& $(MV) ./$(TARGET) $(INSTALLDIR)/$(TARGET)
	
$(GUIDIR)/$(SUBTARGET):
	 cd $(GUIDIR) && $(QMAKE) $(QMKFLAGS) $($(LS) $(LSFLAGS)) \
	 && $(QMAKE) && $(MAKE) && cd .. && cd .. && cd .. \
	 && $(MV) $(GUIDIR)/$(SUBTARGET) $(INSTALLDIR)/$(SUBTARGET)

# Подключаем файлы зависимостей
# Заумное выражение справа означает взять переменную OFILES и заменить ".o"
# на ".d"  Т.е. здесь по сути написано "-include debugger.d error_handler.d ..."
# Директива include работает точно так же, как и препроцессорная #include
-include $(OFILES:.o=.d)

# Общее правило формирования объектника. $< означает левую часть зависимости,
# $@ - правую
%.o : %.cpp
	$(CXX) -c $(DFLAGS) $(CXXFLAGS) $< -o $@

clean:
	$(RM) $(GUIDIR)/Makefile */*.pro *.o *.d *.bak *~*  *.log *.status \
   */*.o */*.d */*.bak *.dat */moc_* */qrc_* */qrc_* */*.dat    \
	*/*/*/*.o */*/*/*.d */*/*/*.bak */*/*/moc_* */*/*/qrc_* */*/*/*.dat \
	*/*/*/*.log */*/*/*.pro */*/*.o */*/*.d
distclean:
	$(RM) $(INSTALLDIR)/$(TARGET) \
	$(INSTALLDIR)/$(SUBTARGET)   \
	$(GUIDIR)/Makefile */*.pro *.o *.d *.bak *~*  *.log *.status \
   */*.o */*.d */*.bak *.dat */moc_* */qrc_* */qrc_* */*.dat    \
	*/*/*/*.o */*/*/*.d */*/*/*.bak */*/*/moc_* */*/*/qrc_* */*/*/*.dat \
	*/*/*/*.log */*/*/*.pro */*/*.o */*/*.d

а configure.in так
configure.in
Код
#                                               -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.

AC_PREREQ([2.61])
AC_INIT([basin], [0.46], [pragma.develop(собачка)gmail.com], [],\
                                       [http://sourceforge.net/projects/basin/])

AC_CONFIG_HEADERS([Interpreter/config/config.h:Interpreter/config/config.h.in])

################################################################################
#
#                      COMMAND LINE ARGUMENTS CHECKS
#
################################################################################

########################### SDL library ############################

AC_ARG_ENABLE(sdl-graphics,
AS_HELP_STRING([--disable-sdl-graphics],[Disable SDL library
 (default: enabled)]),enable_sdl="$enableval",enable_sdl="yes")

AS_IF([(test "${enable_sdl}" != "yes")],
      [AC_DEFINE([DISABLE_SDL_GRAPHICS], [], [Disabling SDL library])])

AC_MSG_NOTICE([Checking for --disable-sdl-graphics option])

# SDL protection from crashes (drawing pixels outside the screen)
AC_ARG_ENABLE(sdl-protection,
AS_HELP_STRING([--disable-sdl-protection],[Disable SDL protection for drawing
 outside the screen (default: enabled)]),enable_protection="$enableval",
 enable_protection="yes")

AS_IF([(test "${enable_protection}" != "yes")],
      [AC_DEFINE([DISABLE_SDL_PROTECTION], [], [Disabling SDL protection for
drawing outside the screen])])

AC_MSG_NOTICE([Checking for --disable-sdl-protection option])

########################## Command line options ###################

# Disable/enable tracing options for interpreter:
#      --trace-act
#      --trace-tree
#      --trace-silent
#      --debug
AC_ARG_ENABLE(tracing,
AS_HELP_STRING([--disable-tracing],[Disable all tracing for interpreting \
program(default: enabled)]),enable_tracing="$enableval",enable_tracing="yes")

AS_IF([(test "${enable_tracing}" != "yes")],
      [AC_DEFINE([DISABLE_TRACING], [], [Disabling tracing])])

AC_MSG_NOTICE([Checking for --disable-tracing option])

################################################################################
#
#                            PROGRAM CHECKS
#
################################################################################
AC_PROG_CXX
AC_PROG_CC

#Checking for cp
AC_CHECK_PROG(having_cp,cp,found,not found)

AS_IF([(test "${having_cp}" != "found")],
      [AC_MSG_FAILURE([cp program not found.May be you are using non standart \
environment.Please view configure.in file,"PROGRAM CHECKS" part to fix the \
problem.])])

################################################################################
#
#                            LIBRARIES CHECKS
#
################################################################################
# Checking for availability of #include <QtGui>
AC_CHECK_FILE([/usr/include/qt4/QtGui/QtGui],[],
              [AC_MSG_FAILURE([Qt 4 development files not found.\
Please install them and try again.On some Debian-based systems simply type \
in terminal: sudo apt-get install libqt4-dev .If you are using non-standart \
system environment,please review configure.in file,"LIBRARIES CHECKS" part,\
fix the path manually,use autoconf and then again configure.])])

AC_CHECK_LIB([QtGui], [connect], [],
             [AC_MSG_FAILURE([Qt 4 Gui library not found.\
Please install it and try again.On some Debian-based systems simply type \
in terminal: sudo apt-get install libqt4-gui.I don't know how it can be\
since you have /usr/include/qt4/QtGui/QtGui file in your system :O ])])

AC_CHECK_LIB([SDL], [SDL_Init], [],
              [AC_MSG_FAILURE([SDL library development files not found.\
Please install them and try again.On some Debian-based systems simply type \
in terminal: sudo apt-get install libsdl-dev])])

AC_CHECK_LIB([pthread], [pthread_create], [],
              [AC_MSG_FAILURE([You dont have POSIX threads library installed on\
 your system.Please install this library and try again.])])

################################################################################

# Checks for typedefs, structures, headers and compiler characteristics.
AC_HEADER_STDBOOL
AC_C_INLINE
AC_TYPE_SIZE_T
AC_CHECK_FUNCS([sqrt])
AC_OUTPUT

################################################################################

# This project using same config file for all interfaces(command-line and gui)
# FIXME

AC_MSG_NOTICE([Copying ./Interpreter/config/config.h to
./GUI/Qt/Basin-IDE/config.h])

cp ./Interpreter/config/config.h ./GUI/Qt/Basin-IDE/config.h

################################################################################

И в конце configure.in есть строчка копирования config.h из директории интерпретатора (autoheader принимает только один путь к config.h как я понял) в папку с GUI.То есть они используют один и тот же config.h,надо это как-то учесть(или придумать какой-то способ с одного конфигуратора генерировать все нужные файлы конфигов). А также то,что .pro файлы и все файлы,генерируемые автоматически лучше,наверное,исключить?
Просто пользователю,скорее всего,удобнее один раз запустить configure ,и один раз make,чтобы всё собралось и все нужные файлы сгенерировались. Или принято,чтобы все эти файлы были в проекте?
Что такое файлы .ts? они у меня не открываются ничем.А также файлы .qm, Doxyfile, .pro.user, .qrc (этот можно сгенерировать).
Конечно,я могу сам "причёсывать" GUI,это не проблема,но просто было бы интереснее договориться,по крайней мере какое-то подобие соглашения должно быть насчёт сборки. Ведь лучше,чтобы всё собиралось просто,или может я тут неправ?

Добавлено через 10 минут
Что-то у меня не компилится,что подправить?
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
/media/src/Basin-IDE$ qmake
/media/src/Basin-IDE$ make
/usr/bin/uic-qt4 finddialog.ui -o .ui/ui_finddialog.h
Warning: name layoutWidget is already used
Warning: name layoutWidget is already used
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I.moc -I.ui -o .obj/highlighter.o highlighter.cpp
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I.moc -I.ui -o .obj/main.o main.cpp
g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I.moc -I.ui -o .obj/basinmainwindow.o basinmainwindow.cpp
basinmainwindow.cpp: In member function ‘void BasinMainWindow::init()’:
basinmainwindow.cpp:19: error: ‘class TabWidget’ has no member named ‘setTabsClosable’
basinmainwindow.cpp:20: error: ‘class TabWidget’ has no member named ‘setMovable’
basinmainwindow.cpp: In member function ‘void BasinMainWindow::createActions()’:
basinmainwindow.cpp:174: error: ‘Quit’ is not a member of ‘QKeySequence’
make: *** [.obj/basinmainwindow.o] Error 1
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru