Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.219.189.247] |
|
Сообщ.
#1
,
|
|
|
Здравствуйте!
У меня есть проект консольной утилитки, сделаной под windows. Компиляция через makefile, но ms c++. Код C++ стандартный, в смысле без специальных расширений от ms. Нет дополнительных библиотек, в результате, лишь один исполняемый файл. Что нужно сделать, чтобы этот же проект, скомпилировался у клиента, на его FreeBSD? Возможно есть онлайн сервисы для компиляции проектов? Ну, чтоб я мог потестировать, не покидая винду? |
Сообщ.
#2
,
|
|
|
А нет возможности взять образ фряшечки для VirtualBox (ну, или поставить её туда), например? я всегда так делаю...
|
Сообщ.
#3
,
|
|
|
Цитата negram @ А нет возможности взять образ фряшечки для VirtualBox (ну, или поставить её туда), например? я всегда так делаю... Возможность, теоретически, есть. Но сколько я там буду ковыряться и разбираться, пока доберусь до нужного.... Это отдельная тема. Я там вообще ничего не знаю. Человек, у которого будет работать тулза, в принципе, сам неплохо разбираеться во FreeBSD. Даже сможет скомпилировать. И я даже, могу ему скинуть проект как есть, а дальше, пущай сам кувыркаеться. Но, как минимум, это не очень хорошо. И не важно, что проект некомерческий. |
Сообщ.
#4
,
|
|
|
# Если определён, используется Intel C++ Compiler, иначе Visual C++ Compiler !ifdef ICL CL = icl !else CL = cl !endif OBJS= auto.obj cases.obj cmdLine.obj main.obj tests.obj utils.obj LIBS= ole32.lib OLEAUT32.LIB EXEDIR=. # Общие флаги - нативные правила локальной видимости for() и тип wchar_t, # используются исключения # отключаются варнинги о небезопасных API COMMON= -Zc:forScope,wchar_t -EHs -D_SCL_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_DEPRECATE -W4 !ifdef WINXP COMPILE_XP = -D_USING_V110_SDK71_ LINK_XP = /link /SUBSYSTEM:CONSOLE,5.01 !else COMPILE_XP = LINK_XP = !endif # Если определён, в качестве STL используется STLPort. # Должна быть определена переменная окружения STLPORT_DIR с маршрутом к его каталогу !ifdef STLPORT COMMON= $(COMMON) -I$(STLPORT_DIR)\stlport !endif # Если определён, билдится с динамической RTL !ifndef DYNAMIC RTL=-MT !else RTL=-MD !endif # Если определён, билдится релиз !ifndef NODEBUG DEBOPT=-Zi -D_DEBUG RTLOPT=$(RTL)d !else DEBOPT= RTLOPT=$(RTL) !endif # Если определён, билдится с отладочной STL !ifdef DEBUG_STL DEBOPT=$(DEBOPT) -D_STLP_DEBUG -D_SECURE_SCL=1 !else DEBOPT=$(DEBOPT) -D_SECURE_SCL=0 !endif # Если определён, оптимизация отключается !ifndef NOOPTIMIZE !ifdef ICL OPTOPT=-O3 !else OPTOPT=-O2 !endif !else OPTOPT=-Od !endif default: certGen.exe certGen.exe: $(OBJS) makefile $(CL) $(OPTOPT) $(RTLOPT) $(DEBOPT) $(COMMON) $(COMPILE_XP) -Fe$(EXEDIR)\certGen.exe $(OBJS) $(LIBS) $(LINK_XP) !ifdef _NMAKE_VER .cpp.obj:: $(CL) $(OPTOPT) $(RTLOPT) $(DEBOPT) $(COMMON) $(COMPILE_XP) -c -MP$(NUMBER_OF_PROCESSORS) $< !else .cpp.obj: $(CL) $(OPTOPT) $(RTLOPT) $(DEBOPT) $(COMMON) $(COMPILE_XP) -c -MP$(NUMBER_OF_PROCESSORS) $< !endif auto.cpp: makefile auto.h property.h utils.h cases.cpp: makefile cases.h tests.h cmdLine.h property.h utils.h cmdLine.cpp: makefile cmdLine.h main.cpp: makefile apps.h tests.h cmdLine.h cases.h utils.h tests.cpp: makefile tests.h cmdLine.h utils.h utils.cpp: makefile utils.h apps.h: makefile auto.h auto.h: makefile variant.h utils.h cases.h: makefile apps.h cmdLine.h: makefile property.h: makefile auto.h variant.h tests.h: makefile utils.h: makefile variant.h: makefile clean: -if exist *.obj del *.obj -if exist *.pdb del *.pdb -if exist certGen.ilk del certGen.ilk -if exist certGen.exe del certGen.exe -if exist certGen.exe.manifest del certGen.exe.manifest rebuild: clean default @rem Сборка без отладочной информации. Утилита будет запускаться также под Windows XP nmake NODEBUG= WINXP= default Добавлено P.S. Самое главное: nmake-у пофик на табуляции или пробелы, он не делает между ними разницы. А вот make под никсами отличает их. Не дай бог перепутать и вместо таба влепить в makefile серию пробелов. Добавлено Подумал, подумал и поменял makefile на более показательный. |
Сообщ.
#5
,
|
|
|
О! Часть рекомендаций я уже выполнял.
Правда, в основном, макросы объявлял в cmd-файлах, но их нетрудно перенести в makefile. На счёт группировки флагов, не думал, но выглядит здраво и перспективно. С табуляцией... Всегда ставлю именно tab. Проблем не должно быть, но спасибо за предупреждение. Есть ещё непонятка, на счёт расширений файлов. У меня в проекте: cpp тело исходного файла. hpp заголовок исходного файла. obj объектный файл. exe исполняемый файл. А на фряхе же всё иначе. Может их тоже засунуть в макросы? |
Сообщ.
#6
,
|
|
|
Eric-S, в *nix системах не принято писать мэйк-файлы вручную. Поэтому, в данном вопросе, развидь - что написал Qraizer. Тру *nix way - это использование генераторов мэйкфайлов. Классика - это использование Autotools, современность - это cmake, ну и новомодное - это QBS. Рекомендую вариант номер два.
Далее. Не имея тестов установки твоего софта на живой FreeBSD - ты по-сути проводишь поединок по боксу по переписке) Посему, поднимай виртуалку, инсталь FreeBSD, и экспериментируй там. В моей подписи найдешь ссылку на мой форум-блог, в нем много моих статей по развертыванию тестовых площадок под разные системы, и по FreeBSD есть. Фря - мой любимый ОС Если возникнут вопросы по Фре, го в раздел "*nix", помогу советами. Да и negram там не спит) Добавлено Цитата negram @ А нет возможности взять образ фряшечки для VirtualBox (ну, или поставить её туда), например? я всегда так делаю... Под винду - vmware лучшая, имхо. На рутрэкере полно предложений) |
Сообщ.
#7
,
|
|
|
Цитата Eric-S @ да в твоём варианте уж лучше не заморачиваться с суффиксами файлов а сделать тупоА на фряхе же всё иначе. Может их тоже засунуть в макросы? c++ *.cpp -o executable Во фряшечке, да и в никсах куда более вероятна другая напасть -- там огромнейший зоопарк компиляторов. Вернее, компилятора-то два основных - clang да gcc, но вот версии (а как следствие баги и фичи) их меняются гораздо чаще, чем это происходит в мире MS. Посему, проблема скорее будет как-раз в компиляции. Как вариант, можно попробовать собрать локально с помощью MinGW (не в курсе - есть ли clang под винду, ибо под фрёй сейчас именно clang есть меинстрим). Но лучше таки заюзать виртуалку, тем более, что под фрёй телодвижений будет меньше, чем под виндой тк компилятор и заголовочные файлы всех базовых компонентов устанавливаются вместе с системой, те доступны всегда. |
Сообщ.
#8
,
|
|
|
Цитата JoeUser @ в *nix системах не принято писать мэйк-файлы вручную. Поэтому, в данном вопросе, развидь - что написал Qraizer. Я знаю мэйк файлы. Я умею работать с nmake от ms и make из mingw. Ну... В какой-то степени. В них есть уверенность. А вот с автотулзами, опасаюсь, что не справлюсь. Как-то без них обходился. Проект небольшой, так что можно и ручками набить. Далее, вот пишет клиент: Цитата По выбору языка: С++ и компиляция не страшно, главное чтобы не использовались какие-то экзотические библиотеки или как минимум они были с исходниками. У нас сервер традиционно работает на FreeBSD, сейчас на 8 версии, вот из этого и исходить можно. В частности там стандартно используется не gmake, а обычный make. Более, о целевой платформе, не имею информации. Но могу запросить, если, что-то важное. Я, не имею понятия, есть ли там автотулзы или какие примочки. На счёт make понятно, желательна классика. Впрочем, этим меня обеспечит урезанный nmake, который ничего новомодного из gnu make не умеет. Цитата JoeUser @ Рекомендую вариант номер два. Спасибо. Понял. Учту. Спрошу. Попробую. Цитата JoeUser @ Далее. Не имея тестов установки твоего софта на живой FreeBSD - ты по-сути проводишь поединок по боксу по переписке) Посему, поднимай виртуалку, инсталь FreeBSD, и экспериментируй там. А может, как-нибудь без этого? Я реально, вообще, ничего не знаю и не умею с никсами! Может быть, где-нибудь есть облачная виртуалка, с готовым образом, куда можно подключиться по консоли и зверски поглумиться над ней? Повторюсь, проектик маленький. Консольная утилита, которая открывает несколько файлов и выдаёт новый через консоль. Сейчас, там работает php-скрипт который всех бесит, но не имеет альтернативы. Полагаю, что установка моей программы не требуется. Или с install, тоже, есть сложности? |
Сообщ.
#9
,
|
|
|
Цитата Eric-S @ А может, как-нибудь без этого? Я реально, вообще, ничего не знаю и не умею с никсами! "Не так страшен черт" Цитата Eric-S @ Полагаю, что установка моей программы не требуется. Или с install, тоже, есть сложности? Инсталл нужен. Для сборки обычно используют два подхода "In-tree" и "Оut-tree". В первом случае все операции конфигурации и сборки производятся непосредственно в каталоге с исходниками. Второй вариант косвенный, типа: tar xf source-1.2.tar.xz # создается каталог source-1.2 mkdir -p build-source cd build-source ../source-1.2/configure make && make install |
Сообщ.
#10
,
|
|
|
Цитата Eric-S @ Ого старьё какое!.. Это я не критикую, это я о том, что тут ещё более непредсказуемо может бытьУ нас сервер традиционно работает на FreeBSD, сейчас на 8 версии, вот из этого и исходить можно. Цитата Eric-S @ ну мне кажется в данных условиях, это даже правильно...А вот с автотулзами, опасаюсь, что не справлюсь. Как-то без них обходился. Цитата Eric-S @ Да нет, с install должно быть всё просто...Или с install, тоже, есть сложности? /usr/bin/install -m 555 -o root -g root executable /usr/local/bin/executable |
Сообщ.
#11
,
|
|
|
Цитата Eric-S @ Может быть, где-нибудь есть облачная виртуалка, с готовым образом, куда можно подключиться по консоли и зверски поглумиться над ней? Ну можно попробовать вот так: https://aws.amazon.com/marketplace/search/r...Terms=FreeBSD+8 (FreeBSD 9, 10 я там нашел) |
Сообщ.
#12
,
|
|
|
Цитата negram @ Ну можно попробовать вот так: https://aws.amazon.com/marketplace/search/r...Terms=FreeBSD+8 (FreeBSD 9, 10 я там нашел) Ха-эм. Даже триал есть. Это интересно. Надо будет попробовать! Добавлено Цитата negram @ ну мне кажется в данных условиях, это даже правильно... Простите, я не понял. К чему относилось ваше одобрение, к автотулзам или мэйкфайлам? Добавлено Цитата JoeUser @ "Не так страшен черт" Может быть. Всё, как-то обходил. Собирался, собирался. Но пока на винде работалось нормально, не особо и шевелился. Добавлено Цитата JoeUser @ Инсталл нужен. Для сборки обычно используют два подхода "In-tree" и "Оut-tree". В первом случае все операции конфигурации и сборки производятся непосредственно в каталоге с исходниками. Второй вариант косвенный... Ух... Это реально новая тема для меня. Надо будет вкурить маны. Даже и не думал, что стоит копать в эту сторону. |
Сообщ.
#13
,
|
|
|
Цитата Eric-S @ К мейкфалам. Мне кажется, что в данных условиях, лучше делать как можно проще, чтоб как можно вероятных мест, где что-то может пойти не так. К чему относилось ваше одобрение, к автотулзам или мэйкфайлам? По хорошему, конечно, если проект надо будет саппортить, обновлять, то тогда да -- cmake и тогда уж и виртуалка с повторением целевого окруженя -- вещи примерно обязательные... |
Сообщ.
#14
,
|
|
|
Цитата negram @ К мейкфайлам. Мне кажется, что в данных условиях, лучше делать как можно проще, чтоб как можно вероятных мест, где что-то может пойти не так. Ага. Понял. Я тоже так считаю. Поэтому и не хочу хвататься за дополнительные инструменты. Особенно в самом начале. Добавлено Цитата negram @ По хорошему, конечно, если проект надо будет саппортить, обновлять, то тогда да -- cmake и тогда уж и виртуалка с повторением целевого окруженя -- вещи примерно обязательные... Впринципе да. Но тут, всё пока очень неоднозначно. 1. Я пока проект пилю. И есть, некоторая вероятность, что тему запорю. Не хотелось бы, но буду честным. 2. неизвестно, понравиться людям мой вариант или нет. У них сейчас скрипт на php активно дрочит регэкспами. Полный вынос мозга, но как-то работает, причём, обычно, даже удовлетворительно. 3. суппорт наверняка будет, если всё взлетит. Но оно должно хоть как-то взлететь и показать себя, закрыв многолетние багрепорты, не сломав уже существующего. 4. на счёт окружения, не знаю, рано загадывать. Там сервак достаточно сложный. Но моя тулза в самом окружении не нуждается. В том смысле, что функционал от окружающей среды вообще не зависит. Нюансы, придётся выяснять на боевой машине. Если вылезут непонятки, то тогда да, конечно, придётся виртуализировать окружение. Но это так... Дополнительная волантёрская работа. И если вдруг через три года, понадобиться исправить багу, то, вероятно, придётся заново поднимать виртуалку и накатывать образ. 5. на счёт сборки, тоже не очень ясно, рано загадывать. В принципе, если скомпилируеться, в первый раз, то и дальше, так же продолжиться. Сервак нормально работает более двадцати лет. Каких либо переездов или обновлений не планируется. Я конечно, постараюсь, сделать всё правильно. Вот только, выяснить бы, что именно считать правильным. |
Сообщ.
#15
,
|
|
|
Цитата Eric-S @ Надо будет вкурить маны. И еще ... Не забудь, что аналог make из Linux во FreeBSD - это gmake. А реальная утилита make - несколько иная. Тож поищи в сети инфу об этом. |