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

Как можно скомпилировать файлы a.cpp и b.cpp всего один раз для проекта, который включает как тесты, так и приложение?
  • 21 мая 2024 г. 16:41
Ответы на вопрос 2
Для компиляции общих файлов для двух исполняемых файлов одновременно вам нужно создать Makefile или другой сценарий сборки, который учитывает зависимости файлов и указывает компилятору, какие файлы нужно скомпилировать только один раз.

Пример Makefile:
```Makefile
CC = g++
CFLAGS = -Wall -g
TARGETS = app test

all: $(TARGETS)

app: a.o common.o
    $(CC) $(CFLAGS) a.o common.o -o app

test: b.o common.o
    $(CC) $(CFLAGS) b.o common.o -o test

a.o: a.cpp
    $(CC) $(CFLAGS) -c a.cpp

b.o: b.cpp
    $(CC) $(CFLAGS) -c b.cpp

common.o: common.cpp
    $(CC) $(CFLAGS) -c common.cpp

clean:
    rm -f *.o $(TARGETS)
```

Здесь common.o компилируется только один раз, а затем используется как зависимость для компиляции исполняемых файлов app и test. Для создания исполняемых файлов достаточно выполнить команду `make`.

Вы также можете использовать другие средства сборки, такие как CMake или Meson, чтобы автоматизировать процесс сборки проекта, включая компиляцию общих файлов только один раз.
Из компилируешь 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>)
Похожие вопросы