Как создать модульный тест googletest, используя библиотеку gtest_main с Jam?

Я пытаюсь создать модульный тест googletest для проверки концепции в качестве новой среды модульного тестирования, которую мы могли бы использовать. В googletest есть два способа написания модульного теста: с основным или без основного. Если вы не определили main, вы можете сделать ссылку в библиотеке gtest_main, которая включает в себя функцию main(), экономя ваше время. В моей среде мы используем Jam для создания бинарных файлов. Я получил двоичный файл для компиляции с main() в моем коде и с помощью библиотеки libgtest, но я ищу, как собрать его в Jam без main.

Базовый случай (с функцией main()):

Я могу построить двоичный файл с этим:

Main MyUnitTestBinary : MyClass.cpp ;
LinkLibraries MyUnitTestBinary : libgtest ;
Library libgtest : $(GTEST_DIR)/src/gtest-all.cc ;

Разбитый регистр (без функции main()):

Я не могу построить двоичный файл с этим. Я вижу много ошибок при попытке связать объекты:

Main sample1_unittest : sample1.cc sample1_unittest.cc ;
LinkLibraries sample1_unittest : gtest_main ;
Library gtest_main : $(GTEST_DIR)/src/gtest_main.cc ;

Я получаю много ошибок компоновщика, связанных с неопределенной ссылкой на бла. Похоже, что неопределенная ссылка исходит из пространства имен testing::internal, которое не является частью моего кода.

Любые мысли о том, как я могу атаковать это, или искать больше подсказок по проблеме?

1 ответ

Решение

Я нашел ответ! Я неправильно не добавлял libgtest и gtest_main в двоичный файл. Я думал, что gtest_main также включает определения для фреймворка, и вам нужно было связать одно или другое. На самом деле вам всегда нужно связать libgtest, и вам нужно связать gtest_main, только если вы не хотите изменять стандартную функцию main().

Итак... правильный ответ - добавить:

LinkLibraries sample1_unittest : libgtest gtest_main ;
Library libgtest : $(GTEST_DIR)/src/gtest-all.cc ;
Другие вопросы по тегам