Компиляция нескольких файлов .cpp и .h с использованием g ++. Я делаю это правильно?

0

ClassA.cpp, у меня есть эти файлы: main.cpp, ClassA.cpp, ClassA.h, ClassB.cpp, ClassB.h

  • Основной имеет #include "ClassA.h" и #include "ClassB.h" и каждый .cpp файл содержит соответствующий файл .h. Это верно?

Теперь я компилирую с помощью g++ *.cpp после чего я получаю исполняемый файл a.exe (Windows)

  • И мой вопрос в том, что это правильный путь? И скажем, если я только вношу изменения в один файл (cpp или h), эта команда также перекомпилирует неизменные файлы (потому что я не вижу новых файлов в папке, кроме a.exe)? Пожалуйста, объясни. Также как я могу это предотвратить?

PS Я не знаком с make и не хочу использовать это либо так, пожалуйста, не ссылайтесь на это в ответах, и я читаю с помощью g++ для компиляции нескольких файлов.cpp и.h, но мне нужно больше объяснять мои вопросы.

Теги:
gcc
g++
compilation

4 ответа

2
Лучший ответ

Если вы хотите сделать это вручную, вы можете скомпилировать все ваши.cpp файлы в объектные файлы

g++ -c *.cpp

и связывать все объектные файлы

g++ *.o -o a.out

Если ClassA.cpp изменен, вы можете просто перекомпилировать ClassA.cpp

g++ -c ClassA.cpp

и соединить их все снова

g++ *.o -o a.out

По крайней мере, вам не нужно перекомпилировать неизменные.cpp файлы.

2

И мой вопрос в том, что это правильный путь?

Лучше создать makefile и использовать make для создания вашей цели.

И скажем, если я только вношу изменения в один файл (cpp или h), эта команда также перекомпилирует неизменные файлы (потому что я не вижу новых файлов в папке, кроме a.exe)?

Да.

Пожалуйста, объясни. Также как я могу это предотвратить?

Использование make. make поможет отслеживать зависимости и компилировать файлы, которые необходимо скомпилировать, или вообще устаревать цели сборки.

1

Для #include вы правы. Удостоверьтесь, что у вас есть охранники, чтобы их содержимое было включено только один раз.

#ifndef CLASS_A_H
#define CLASS_A_H

class classA
{

};

#endif

вы можете указать -o на g++, чтобы назвать ваш выходной файл чем-то еще, чем "a.exe",

Обычно с gcc/g++ и другими компиляторами командной строки стратегия состоит в том, чтобы сначала скомпилировать исходные файлы, а затем связать их с другой командой. Это помогает предотвратить перекомпилирование файлов, которые не были изменены. Это использует переключатель -c gcc

Попробуй это

g++ -c ClassA.cpp -o ClassA.o
g++ -c ClassB.cpp -o ClassB.o
g++ -c main.cpp -o main.o

g++ ClassA.o ClassB.o main.o -o myProgram.exe
0

Для этого вам следует использовать cmake

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
project(cmake_demo)
    File(GLOB SRC_FILES src/*.cpp)
message(src: ${SRC_FILES})
add_executable(cmake_demo ${SRC_FILES})
  1. создать CMakeLists.txt и предыдущий код в этом файле
  2. создайте папку под названием src, поместите все ваши файлы в эту папку
  3. затем откройте терминал и перейдите к этому CMakeLists.txt
  4. создать сборку папок
  5. перейдите в эту папку с терминала
  6. type (cmake..), затем введите
  7. затем введите (make), затем введите

он должен быть скомпилирован и работать так, как вы хотите :)

структура папок должна выглядеть так:

CMakeLists.txt
src
build

надеюсь, поможет :)

  • 0
    cmake - продвинутый инструмент. Пусть OP начнёт с классического make, пока он не поймет разницу между этими разными инструментами.

Ещё вопросы

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