Проблема/цель Я пытаюсь выяснить, как получить полный контроль над командой компиляции netbeans, чтобы я мог ее изменить:
'g++ main.cpp foo.cpp bar.cpp'
чтобы:
g++ main.cpp -Wall '
Причина. Если я запишу в терминал и вручную напечатаю: "g++ main.cpp -Wall", моя программа будет компилироваться просто отлично. Когда я пытаюсь скомпилировать с netbeans, я вижу в консоли, что он выполняет "g++ main.cpp foo.cpp bar.cpp", и это терпит неудачу, поскольку main.cpp уже включает foo.cpp и bar.cpp наверху файла. Я получаю "множественное определение файла/метода".
Вопрос: Как я могу изменить команду, чтобы она включала main.cpp в команду компиляции? Еще лучше, как вы вручную укажете всю строку команд?
Судя по вашему объяснению, вы делаете это неправильно, в первую очередь. Когда у вас есть несколько файлов cpp, вы скомпилируете каждый из них в один объектный файл, а затем соедините их вместе. Использование #include для включения.cpp файла - неправильный способ - это то, для чего предназначены файлы заголовка (.h).
Заголовочные файлы (.h) содержат объявления частей кода, которые определены в файлах C++ (.cpp). Включая заголовок, вы можете использовать функции, определенные в другом месте. В другом месте может быть еще один объектный файл (.o или.obj - созданный gcc -c something.cpp) или файл библиотеки (.lib). Когда у вас есть 3 файла cpp, a.cpp, b.cpp, c.cpp, и все они используют функции друг от друга, цикл компиляции будет:
gcc -c a.cpp -> yields a.o
gcc -c b.cpp -> yields b.o
gcc -c c.cpp -> yields c.o
gcc -o program a.o b.o c.o -> yields program (executable)
Сокращение:
gcc a.cpp b.cpp c.cpp -o program
Когда b.cpp требуется функция, определенная в c.cpp, тогда b.cpp необходимо
#include <c.h>
где ch содержит декларацию функций, которые нужно использовать b.
Когда вы делаете что-то вроде #include "b.cpp"
в своем исходном коде, это почти всегда просто неправильно.