Указываете команду полной компиляции, которую netbeans использует для компиляции программы на C ++?

0

Проблема/цель Я пытаюсь выяснить, как получить полный контроль над командой компиляции 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 в команду компиляции? Еще лучше, как вы вручную укажете всю строку команд?

Теги:
netbeans
properties
command-line
compilation

1 ответ

1

Судя по вашему объяснению, вы делаете это неправильно, в первую очередь. Когда у вас есть несколько файлов 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" в своем исходном коде, это почти всегда просто неправильно.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню