компиляция с++ и заголовочный файл

138
22 мая 2019, 11:10

основной файл: main.cpp

#include "file.h"
#include <iostream>
using namespace std;
int main(int argc, char* argv[]){
    func1();
    return 0;
};

заголовочный файл: file.h

void func1();

file.cpp файл с кодом file.h

#include <iostream>
void func1(){
    std::cout << "1";
};

так вот при попытке скомпилировать код с помощью команды (g++ main.cpp) выводи сообщение что не знает что за функция func1(), а вот при использовании (g++ main.cpp file.cpp) все работает, так вот закралось сомнение а правильно ли так компилить, поскольку если в дальнейшем в файлов будет от 10 и все их нужно прописывать после (g++ main.cpp ...)? использую MinGW версия gcc-6.3.0

Answer 1

Совершенно верно, если файлов будет 10, то все 10 придется прописывать в командной строке компилятора

g++ file1.cpp file2.cpp ... file9.cpp main.cpp

Такая командная строка на самом деле последовательно выполняет два этапа трансляции: сначала компилирует индивидуальные .cpp файлы в .o файлы, а затем собирает полученные .o файлы в финальную программу.

При желании вы можете использовать опцию -c для того, чтобы разделить эти два этапа: сначала скомпилировать .cpp файлы в .o файлы по одному

g++ -c file1.cpp
g++ -c file2.cpp
...
g++ -c file9.cpp
g++ -c main.cpp

а затем выполнить финальную сборку. Однако для финальной сброки вам все равно придется передать все полученные .o файлы в g++ (или в ld)

g++ file1.o file2.o ... file9.o main.o

Т.е. как ни верти, некий шаг, на котором вам придется перечислить "много файлов" в командной строке, все равно будет.

Избавиться от чересчур длинных перечислений имен файлов помогут библиотеки, но на самом деле ничего страшного в таких длинных командных строках нет.

Answer 2

Да, g++ main.cpp file.cpp - правильно.

если в дальнейшем в файлов будет от 10 и все их нужно прописывать после (g++ main.cpp ...)?

Начните использовать IDE, тогда не будет необходимости ничего вручную прописывать.

READ ALSO
Одномерный массив

Одномерный массив

Описать функцию, которая в новом массиве получит только положительные значения элементов исходного массиваИспользовать механизм указателей

137
Как добавить элементы в массив static const char *

Как добавить элементы в массив static const char *

В общем, есть массив и нужно в него подобавлять элементовВопрос:каким образом это осуществить?

174
Посчитать количество строк в функции

Посчитать количество строк в функции

Можно ли как-то узнать, сколько строчек в функции? Возможно, рекурсивно посчитать все строчки для всех вызываемых подфункцийНадо подобное...

147
Чтение квадратной матрицы из файла

Чтение квадратной матрицы из файла

У меня имеется файл, в котором я записал квадратную матрицу через пробелы в виде

141