Установка gtest с помощью conan

Я собираюсь перейти на conan в надежде, что это упростит установку моего пакета моими пользователями. Все было нормально, пока я не начал добавлять gtest в свой пакет.

Во время установки я получаю сообщения

gtest/1.8.1@bincrafters/stable: Package installed 
conanfile.txt imports(): Copied 4 '.a' files: libgmockd.a, libgtestd.a, libgmock_maind.a, libgtest_maind.a

Однако во время сборки я получаю:

/usr/bin/ld: cannot find -lgmock_maind
/usr/bin/ld: cannot find -lgmockd
/usr/bin/ld: cannot find -lgtestd

Мой файл CMakeLists.txt содержит

target_link_libraries(
    ${PROJECT_NAME}_GTEST
    Modules
    ${CONAN_LIBS}
)

Чего не хватает? Могу ли я предоставить

link_directories (?)

аргумент?

(Между тем, после некоторых испытаний мне это удалось: не только

 link_directories(${CONAN_LIB_DIRS_GTEST})

необходимо, но также необходимо очистить .data Конана.)


person katang    schedule 21.07.2019    source источник
comment
Можете ли вы опубликовать целые файлы conanfile.txt и CMakeLists.txt? У меня аналогичная проблема с imgui-sfml   -  person Lejuanjowski    schedule 06.08.2020


Ответы (2)


Какой генератор вы используете?

У меня это в моем conanfile.txt требует раздела

gtest/[~=1.8]@bincrafters/stable

Это то, что у меня есть для генераторов в этом разделе

cmake_find_package
cmake_paths

И в CMakeLists.txt

include(${CMAKE_BINARY_DIR}/conan_paths.cmake)
find_package(gtest REQUIRED)
add_dependencies(something gtest::gtest)
target_link_libraries(something gtest::gtest)

Обратите внимание, что FindGTest - это встроенный модуль, а Findgtest.cmake - это файл, созданный conan в каталоге сборки.

person Kevin    schedule 10.09.2019
comment
Я использовал cCMake - person katang; 20.09.2019

Пакет Bincrafters для gtest помечен как устаревший, вы должны использовать пакет в центре конана.
Для этого просто добавьте рецепт конана в conanfile.txt/py.
Допустим, вы используете простой conanfile.txt:

# conanfile.txt
[requires]
gtest/1.10.0
    
[generators]
cmake

Затем вы можете запустить conan install

Затем добавьте инструкции conan в CMakeLists.txt вашего проекта:

include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup()
target_link_libraries(${PROJECT_NAME} ${CONAN_LIBS})

Вы можете распечатать сообщение, чтобы увидеть включенные библиотеки:
message("-- Conan libs: ${CONAN_LIBS}").
Они должны включать как gtest, так и gmock.

Наконец, просто включите заголовок и используйте фреймворк:

 #include "gtest/gtest.h"
    
 TEST(TestName, Foo)
 {
     EXPECT_TRUE(true);
 }
person Lejuanjowski    schedule 09.12.2020