«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как скомпилировать и связать несколько файлов .cpp в один двоичный файл?

Как скомпилировать и связать несколько файлов .cpp в один двоичный файл?

Опубликовано 11 ноября 2024 г.
Просматривать:258

How to Compile and Link Multiple .cpp Files into a Single Binary?

Как скомпилировать и связать несколько файлов .cpp в двоичный файл

В этой статье рассматривается вопрос компиляции нескольких файлов .cpp в один .o объекты и связывание их в один двоичный файл.

Конфигурация Makefile

Для этого можно использовать Makefile со следующим содержимым:

SRC_DIR = ./src
OBJ_DIR = ./obj
SRC_FILES = $(wildcard $(SRC_DIR)/*.cpp)
OBJ_FILES = $(patsubst $(SRC_DIR)/%.cpp,$(OBJ_DIR)/%.o,$(SRC_FILES))

main.exe: $(OBJ_FILES)
    g   $(LDFLAGS) -o $@ $^

$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp
    g   $(CPPFLAGS) $(CXXFLAGS) -c -o $@ $<

Объяснение:

  • SRC_DIR: Указывает каталог, содержащий исходные файлы .cpp.
  • OBJ_DIR: Указывает каталог, в котором будут созданы объекты .o.
  • SRC_FILES: A список всех файлов .cpp в SRC_DIR.
  • OBJ_FILES: Список всех объектов .o, которые будут созданы.
  • main.exe: Имя окончательного двоичного файла.
  • LDFLAGS: Флаги компоновщика.
  • CPPFLAGS: Флаги препроцессора C.
  • CXXFLAGS: Флаги компилятора C.

Генерация графа зависимостей

Чтобы автоматически генерировать зависимости между исходным и объектным файлами, добавьте следующее в Makefile:

CXXFLAGS  = -MMD
-include $(OBJ_FILES:.o=.d)

Рекомендации

Этот подход обычно используется для компиляции и связывания нескольких файлов C. Тем не менее, важно обращаться к Руководству GNU Make за дополнительными указаниями и расширенными опциями.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3