#c #cmake #googletest #googlemock
#c #cmake #googletest #googlemock
Вопрос:
Просто короткий и простой вопрос, почему рекомендуется компилировать googletest и googlemock в каждом проекте, включая исходные файлы (вместо того, чтобы использовать cmake для архивирования библиотеки с расширением ‘.a’, а затем связывать это со многими проектами).
источник:https://www.jetbrains.com/help/clion/creating-google-test-run-debug-configuration-for-test.html
Комментарии:
1. Похоже, что рекомендация там основана на неработающей ссылке. Часто задаваемые вопросы по тестированию Google больше не содержат такой рекомендации (во всяком случае, я не смог ее найти).
Ответ №1:
Потому что файл ‘.a’, созданный googletest, будет отличаться в зависимости от флагов компилятора. В разных тестовых проектах, которые вы хотите создать, они могут быть установлены по-разному, и это может вызвать проблемы, если они ссылаются на общий файл googletest ‘.a’.
Из ‘make install’ считается вредным:
В файле README для gtest и gmock мы сказали, что вы можете установить скомпилированные библиотеки gtest и gmock в системах * nix с помощью ‘make install’. Тогда каждый пользователь вашего компьютера сможет писать тесты без перекомпиляции gtest или gmock.
Это казалось хорошей идеей, когда мы писали README, но у нее есть недостаток: каждый пользователь должен компилировать свои тесты, используя те же флаги компилятора, которые использовались для компиляции установленных библиотек gtest / gmock; в противном случае он может столкнуться с неопределенным поведением (т. Е. тесты могут вести себя странно и даже могут завершиться сбоем без видимых причин).
Комментарии:
1. даже если мы принимаем риск / ошибку (скажем, потому, что все в нашем проекте используют идентичную среду сборки), нам все равно нужно добавить включаемые файлы в наш проект. Это правильно? Или есть способ избежать этого? Во-вторых, учитывая, что использование docker сейчас довольно распространено, разве не нормально ожидать, что пользователи захотят создавать контейнеры с четко определенными флагами компилятора плюс библиотеки, чтобы инженеры могли по большей части сосредоточиться на аспектах кодирования?