2015-04-12 2 views
1

У меня есть проект проекта C++ с cmake.cmake, могу ли я построить библиотеку из исполняемых объектов

add_executable(app foo.cpp bar.cpp main.cpp) 

И я хотел бы использовать foo.cpp и bar.cpp в тестовом проекте.

Я знаю, что я мог бы построить библиотеку, а затем связать его в обоих проектах: как:

add_library(foobar foo.cpp bar.cpp) 

add_executable(app main.cpp) 
target_link_library(app foobar) 

add_executable(test test.cpp) 
target_link_library(test foobar) 

Но я не хотел бы изменить систему сборки и приложение ссылку test против объектов foo.o и bar.o.

Знаете ли вы, как я мог это сделать с помощью cmake?

+0

Является ли название предназначением сказать «cmake»? – Carcigenicate

+0

oops, thx, fixed! – overlii

+1

Вы можете просто создать .cpp-файлы для «теста» в другой раз. Более чистая для меня, чем попытка повторного использования объектных файлов. –

ответ

0

Преамбула: вы не можете ссылаться на исполняемый файл, поэтому вам нужно что-то изменить в том, как вы строите вещи.

Некоторые решения, предлагаемые в комментариях, являются рискованными. Не переходите на привязку непосредственно к объектным файлам, вы получите столько боли, пытаясь найти, где ваши объектные файлы заканчиваются, когда вы что-то меняете, cmake предназначен для упрощения такого рода вещей, общее предложение используйте правильную архитектуру для своего проекта.

Предлагаемые решения:

  • Просто сделать ваш Foobar библиотека статическая библиотека add_library(foobar STATIC foo.cpp bar.cpp) и держать код, предложенный в начале.
  • Или взгляните на предложение о сакре (object libraries), что хорошо.

 Смежные вопросы

  • Нет связанных вопросов^_^