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)
PS Я не знаком с make и не хочу использовать это либо так, пожалуйста, не ссылайтесь на это в ответах, и я читаю с помощью g++ для компиляции нескольких файлов.cpp и.h, но мне нужно больше объяснять мои вопросы.
Если вы хотите сделать это вручную, вы можете скомпилировать все ваши.cpp файлы в объектные файлы
g++ -c *.cpp
и связывать все объектные файлы
g++ *.o -o a.out
Если ClassA.cpp изменен, вы можете просто перекомпилировать ClassA.cpp
g++ -c ClassA.cpp
и соединить их все снова
g++ *.o -o a.out
По крайней мере, вам не нужно перекомпилировать неизменные.cpp файлы.
И мой вопрос в том, что это правильный путь?
Лучше создать makefile
и использовать make
для создания вашей цели.
И скажем, если я только вношу изменения в один файл (cpp или h), эта команда также перекомпилирует неизменные файлы (потому что я не вижу новых файлов в папке, кроме a.exe)?
Да.
Пожалуйста, объясни. Также как я могу это предотвратить?
Использование make
. make
поможет отслеживать зависимости и компилировать файлы, которые необходимо скомпилировать, или вообще устаревать цели сборки.
Для #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
Для этого вам следует использовать 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})
он должен быть скомпилирован и работать так, как вы хотите :)
структура папок должна выглядеть так:
CMakeLists.txt
src
build
надеюсь, поможет :)