2011-12-14 7 views
2

У меня есть основной код (.cpp) и некоторые другие файлы (.cpp и их соответствующий файл .h), которые содержат функцию, которая используется в моей основной программе. Я хотел бы знать, как скомпилировать мои файлы и запустить основной код.Как скомпилировать проект с несколькими исходными файлами?

ответ

5

Это зависит от вашего компилятора. Например, с GCC вы можете написать:

g++ foo.cpp bar.cpp baz.cpp -o foo # compile program 
./foo        # run program 
+0

Я упоминаю -Wall & -g, которые очень полезны. –

+0

Большое спасибо, это именно то, что я хотел. – Sohrab

+0

мы также можем использовать эту команду для компиляции всех файлов в папке: g ++ * .cpp – Sohrab

1

Но реальный ответ заключается в использовании некоторых механизмов сборки, например, введите Makefile и используйте GNU Make.

Есть некоторые лучше, чем строитель GNU Make, как Omake

Строители очень полезен, потому что в example по ruakh вы можете не захотеть перекомпилировать foo.cpp когда только bar.cpp изменился, так что вы должны принять зависимостей.

(и есть Makefile генераторы, как automake, cmake ...)

3

Basile's right on, you need build machinery иметь программное обеспечение, вы можете легко работать. Вы действительно хотите иметь возможность просто запустить make или что-то подобное и получить ваш проект, перестроенный быстро повторяемым способом. Вы также хотите, чтобы весь ваш проект постоянно обновлялся, перестраивая все, что зависит от того, что изменилось. Хотя вы могли бы просто обойти сценарий оболочки, содержащий строки g++, как в ruakh's answer, это будет излишне перекомпилировать больше, чем вам нужно. (Что не очень важно для небольших проектов, но становится важным, когда проекты растут больше, чем тривиальные.)

Я потратил пятнадцать минут, чтобы снять документацию с OMake, но выглядит очень многообещающе. make является стандартным для систем и предоставляет огромный набор предопределенных правил сборки, включая правила для C++, поэтому создавать проекты Makefile не очень сложно.

Это будет выглядеть примерно так:

# the compiler and its flags 
CXX = g++ 
CXXFLAGS = -Wall 

PROGRAM = foo 

OBJECTS = foo_a.o foo_b.o foo_c.o foo_d.o 

.PHONY: all 

.DEFAULT: all 

all: $(PROGRAM) 

$(PROGRAM): $(OBJECTS) 

Объекты foo_a.o будут построены из соответствующего исходного файла с именем foo_a.c, foo_a.cc, foo_a.C, foo_a.cpp, foo_a.p, foo_a.f, foo_a.F и т.д., для C , C++, Fortran, Pascal, Lex, Yacc и т. Д.

O'Reilly make book, к сожалению, устарел на этом этапе; правила .SUFFIX были вытеснены pattern rules, но в книге O'Reilly нет охвата правил шаблонов. Тем не менее, это все еще хорошая отправная точка, если полный GNU Make documentation не подходит для вас.

+0

Я добавил 'CXXFLAGS' и' CXX' в ваш пример 'Makefile' –

+0

Но я считаю, что документация GNU Make достаточно читаема. –

+0

Спасибо Базиле! Мне нравится документация GNU Make для поиска определенных вещей, но я должен признать, что я не пробирался в документацию GNU до тех пор, пока _after_ не проделал бы весь путь через книгу O'Reilly. – sarnold

Смежные вопросы