Как компилировать общие файлы двух бинарников один раз?

Есть проект и тесты для него.
Тесты содержат файлы из основного бинарника.
Т.е
tests.exe = a.cpp + b.cpp + test_main.cpp
app.exe = a.cpp + b.cpp + app_main.cpp
Можно ли как-то компилировать a и b.cpp один раз?
  • Вопрос задан
  • 91 просмотр
Решения вопроса 1
AshBlade
@AshBlade
Просто хочу быть счастливым
Из компилируешь a.cpp и b.cpp, а затем просто используешь их объектные файлы

пример на Makefile

a.o: a.cpp
     gcc -c a.cpp -o a.o

b.o: b.cpp
     gcc -c b.cpp -o b.o

tests.exe: a.o b.o
     gcc a.o b.o test_main.cpp -o tests.exe

app.exe: a.o b.o
     gcc a.o b.o app_main.cpp -o app_main.exe


как-то так

UPD: если про CMake, то используй OBJECT библиотеку

add_library(common OBJECT a.cpp b.cpp)
add_executable(tests PRIVATE tests_main.cpp $<TARGET_OBJECTS:common>)
add_executable(app PRIVATE app_main.cpp $<TARGET_OBJECTS:common>)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
wataru
@wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.
Да. Любая система сборки будет компилировать только один раз. Будь то cmake, ninja или visual studio.
Ответ написан
Комментировать
@res2001
Developer, ex-admin
Из файлов исходников, которые используются (или теоретически могут использоваться) в разных целях делаешь статическую библиотеку в рамках этого же проекта.
В зависимости от размера проекта таких промежуточных библиотек может быть много. Есть смысл сами подобные библиотеки разделять по функционалу. Например в одном тесте тестируется какой-то определенный функционал, в другом - другой функционал и т.п.
Дальше эту библиотеку(и) ставишь в зависимости для конкретных целей (исполняемый файл, тесты и т.п.)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы