2013-06-27 2 views
2

В настоящее время я помогаю мигрировать группу проектов визуальной студии для использования CMake. В настоящее время все проекты были перенесены и успешно работают. Тем не менее, нам еще предстоит повторно включить наши модульные тесты.Добавление тестового проекта в дополнение к существующему проекту

Есть ли способ создать отдельный исполняемый файл для модульных тестов без необходимости перекомпилировать все исходные файлы зависимого проекта? Другими словами, существует ли простой способ разрешить тестовому проекту связываться с объектными файлами, создаваемыми зависимым проектом?

Ниже приведен пример структуры двух проектов, приложений и тестирования:

Foo 
    bar.cpp 
    baz.cpp 
    main.cpp // entry for app executable 

TestFoo 
    test-bar.cpp // requires linking to bar 
    test-baz.cpp // requires linking to baz 
    main.cpp // entry for test executable 
+0

Потенциальный дубликат http://stackoverflow.com/questions/4614137/avoid-recompilation-of-common-object-files-with-cmake – jwalk

ответ

4

Если вы используете CMake версии> = 2.8.8, вы можете использовать библиотеку объектов:

add_library(bar OBJECT a.c) 

Тогда ссылка (на самом деле не связывая на самом деле) это Foo:

add_executable(foo main.cpp $<TARGET_OBJECTS:bar>) 

и бар:

add_executable(testfoo main.cpp $<TARGET_OBJECTS:bar>) 

Библиотека объектов не создает файл библиотеки, но действовать так или иначе, как общий объект. Вы можете найти более подробную информацию здесь: http://www.cmake.org/Wiki/CMake/Tutorials/Object_Library

+0

Кажется не работает: CMake Ошибка в CMakeLists.txt: 197 (target_link_libraries): Целевой «lib» типа OBJECT_LIBRARY не может быть связан с другой целью . Можно ссылаться только на библиотеки STATIC или SHARED или на исполняемые файлы с набором свойств ENABLE_EXPORTS. – jwalk

+0

Да, я исправил свой пример, извините :) – Guillaume

+0

Есть ли способ использовать «target_link_libraries» с целью объекта? Кажется, я получаю сообщение об ошибке, но затем мы возвращаемся к той же проблеме, связанной с дублированием команды cmake для нескольких целей (в данном случае 'foo' и' testfoo'). – jwalk