2015-01-16 4 views
0

Я хочу построить и протестировать небольшой мой проект с cmake и gtest. В проекте у меня есть функция readModel(...), где определение и реализация разделены. Проект строит хорошо, но я получаю следующее сообщение об ошибке компоновщика для испытания readModel(...)Испытания на связывание CMake и GTest

cd /home/kain88/Desktop/example/build/test && /usr/bin/cmake -E cmake_link_script CMakeFiles/example_test.dir/link.txt --verbose=1 
/usr/bin/c++ -Wall -std=c++14 CMakeFiles/example_test.dir/pdb_test.cpp.o -o example_test -rdynamic ../ext/gtest-1.7.0/libgtest.a ../ext/gtest-1.7.0/libgtest_main.a ../ext/gtest-1.7.0/libgtest.a -lpthread 
CMakeFiles/example_test.dir/pdb_test.cpp.o: In function `PDB_TEST_readModel_Test::TestBody()': 
pdb_test.cpp:(.text+0x13): undefined reference to `readModel(std::string const&)' 
collect2: error: ld returned 1 exit status 

Кажется, что CMake не включая файл *.o созданных в src папке для теста. Как я могу сказать cmake, что он должен содержать файлы *.o из папки src также для теста?

Это CMakeLists.txt, который я использую в тестовой папке.

# enable GTest 
enable_testing() 
include_directories(${gtest_SOURCE_DIR}/include ${gtest_SOURCE_DIR} 
    ${PROJECT_SOURCE_DIR}/src) 

# Unit Test 
set(PROJECT_TEST_NAME ${PROJECT_NAME_STR}_test) 
file(GLOB TEST_SOURCES "*.cpp") 
add_executable(${PROJECT_TEST_NAME} ${TEST_SOURCES}) 
target_link_libraries(${PROJECT_TEST_NAME} gtest gtest_main) 
add_test(test ${PROJECT_TEST_NAME}) 

Полный полосатый вниз примера случай может быть found here

ответ

2

Вы можете создать целевую библиотеку объекта, который собирает объектные файлы .o:

ADD_LIBRARY(${PROJECT_NAME}_objects OBJECT ${SRC_FILES} ${INCL_FILES}) 

Используйте результат этого на обоих компьютерах lib/exe и тест:

ADD_EXECUTABLE(${PROJECT_NAME} $<TARGET_OBJECTS:${PROJECT_NAME}_objects>) 
ADD_EXECUTABLE(${PROJECT_TEST_NAME} ${TEST_SOURCES} $<TARGET_OBJECTS:${PROJECT_NAME}_objects>) 

PS: Вы можете использовать тот же трюк для скомпилируйте объекты, разделяемые несколькими целями, только один раз, например, цель совместного использования и статическая библиотека.

+0

Спасибо, что решил. –

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