LG.BALUKATION's Weblog

Ничего, это тоже кое-что… А при желании из него можно сделать что угодно

Сборка в VisualStudio

Posted by LG.BALUKATION на 2008/08/20

Попробовал вчера снова 2005 студию, на этот рас на работе… Собстно к проекту на сях меня ещё не приписали, зато сказали что скоро буду этим заниматься и дали уже первое тестовое задание чтоб поправктиковаться и вспомнить язык.

Лично я за посление годы как-то отошёл от сред разработки, предпочитая для своего кода писать Make-файлы. Вот только даже когда я ещё юзал венду, я в основном использовал там набор утилит GNU и посему мало что знаю об утилитах Microsoft.

Сейчас вот попробовал «портировать» свою простенькую систему сборки, оказалось это не так уж и сложно.

При установке студии в меню добавляется, среди прочего и ярлык «Visual Studio 2005 Command Prompt» — это запуск консоли с уже настроенным окружением (мыж не в юниксе, чтоб всё нужное окружение было сразу доступно — тут надо или прописывать самому или пользоваться такими вот извращениями).

Лично у меня стоял набор никсовых тузл (shell, grep, ls и т.п.), в котором в принципе есть и GNU Make под венды, однако в студии есть свой сборщик и он вполе совместим (если не юзать специфичных наворотов). Называется сиё чудо nmake и так же по-умолчанию ищет Makefile, если файл не указан явно (опция -f).

Компилятор у мелкомягких зовётся cl. Он так же умеет «хавать» исходный код и обьектные файлы (желательно с расширением *.obj), однако некоторые его опции не пересекаются с GCC. Например, в VisualC++ для получения обьектного файла и исполняемого файла используются разные опции. Так же при опции /Wall (включить все предупредения), мелкомягкий компиль очень много матерится на свою же родную библиатеку шаблонов :-?

Так же стоит помнить, что в Windows сандартная консоль не обладает столь гибкими средствами, как в UNIX — вам придётся либо устанавливать аналогичные средства в Windows, либо переписать свои скрипты с учётом только поддерживаемых вендой средств.

В итоге портирование шло примерно так:
1) копируем makefile
2) заменяем имя компилятора на cl
3) смотрим справку по cl и выставляем нужные опции компиляции (количество и тип предупреждений, наличие или отсутствие отладочной инфы, файлы листинга и т. п и т. д. — сами решайте, что вам надо).
3) меняем опции для получения выходных файлов — для объектного кода пишем /Fo, а для исполяемого /Fe
4) пробуем и правим если что не так =)

Вот пример моего изначального makefile для сборки простенькой проги в GNU/Linux:

TARGET		= bin/myList
###################################
CC			= g++
COPTS		= -g -Wall -Wextra -ansi -pedantic
###################################
MAIN_CPP	= src/main.cpp
MAIN_O		= obj/main.o
MYLIST_H	= src/mylist.h
MYLIST_CPP	= src/mylist.cpp
MYLIST_O	= obj/mylist.o
###################################
all: mkdirs build link
build: $(MAIN_O) $(MYLIST_O)
clean: clean_obj clean_bin
clean_bin:
	rm -fR bin
clean_obj:
	rm -fR obj
link:
	$(CC) $(COPTS) obj/*.o -o $(TARGET)
mkdirs:
	if test ! -d obj; then mkdir obj; fi
	if test ! -d bin; then mkdir bin; fi
$(MAIN_O): $(MAIN_CPP)
	$(CC) $(COPTS) -c $(MAIN_CPP) -o $(MAIN_O)
$(MYLIST_O): $(MYLIST_H) $(MYLIST_CPP)
	$(CC) $(COPTS) -c $(MYLIST_CPP) -o $(MYLIST_O)

А вот, чем я теперь собираю тот же код в венде:

TARGET		= bin\myList.exe
#######################################
CC			= cl
COPTS		= /Wall
#######################################
MAIN_CPP	= src\main.cpp
MAIN_O		= obj\main.obj
MYLIST_H	= src\mylist.h
MYLIST_CPP	= src\mylist.cpp
MYLIST_O	= obj\mylist.obj
#######################################
all: mkdirs build link
build: $(MAIN_O) $(MYLIST_O)
clean: clean_obj clean_bin
clean_bin:
	rm -fR bin
clean_obj:
	rm -fR obj
link:
	$(CC) $(COPTS) $(MAIN_O) $(MYLIST_O) /Fe$(TARGET)
mkdirs:
	if not exist obj mkdir obj
	if not exist bin mkdir bin
$(MAIN_O): $(MAIN_CPP)
	$(CC) $(COPTS) /c $(MAIN_CPP) /Fo$(MAIN_O)
$(MYLIST_O): $(MYLIST_H) $(MYLIST_CPP)
	$(CC) $(COPTS) /c $(MYLIST_CPP) /Fo$(MYLIST_O)

Вот так вот, хотя для больших готовых проектов или при не умении писать makefile’ы наверно лучше искать другие способы автоматизации сборки.

Advertisements

комментариев 5 to “Сборка в VisualStudio”

  1. Igor said

    гы, я бы сблевал и уволился :D

  2. prosolin said

    cmake не пробовал?

  3. Игорь, есть нишы, где у студии почти нет конкурентов. Основная проблема в том, что куча фирмовых SDK под девайсы рассчитаны именно на венду, а в венде студия — лучший компиль (смотрел я и GCC и Wacom и Borland в своё время). Ессно GCC есть везде, но его порты на не никсовые ОСи часто уступают нативным компилям.

    ЗЫ: а я собстно от студии ща тока компиль и юзаю, код один хрен привык писать другими средствами.

    prosolin, неа… Видел его работу в линухе — впечатляет, а в венде я пока не ставил почти ничего стороннего для сей, т.к. сишными проектами не занимаюсь ещё. Да и вродь у нас почти всё Apache ANT собирает по-привычке с жавовых игр.

  4. Igor said

    я немного не про это. Я тут зажрался, видимо. И если бы мне предложили перейти в проект на C#, я бы отказался.

  5. Но я то перехожу на С++, именно он (вкупе с OpenGL) меня больше всего интересовал последние годы. Так что отказываццо мне следовало скорее от жавы, тем более тогда вообще не знал её +)

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s