LD_LIBRARY_PATH для gtest_discover_tests (в QtCreator?) ⇐ C++
-
Гость
LD_LIBRARY_PATH для gtest_discover_tests (в QtCreator?)
У меня есть проект CMAKE, который содержит два подкаталога: библиотеку и тесты. Когда приходит время перечислить тесты, gtest_discover_tests запускает исполняемый файл теста, но поскольку исполняемый файл теста находится в родственном каталоге тестируемой библиотеки, он, похоже, не находит его. Если я запускаю его через терминал и устанавливаю LD_LIBRARY_PATH, все работает нормально. Есть ли способ CMAKE установить LD_LIBRARY_PATH для процесса компиляции? Я могу принудительно использовать его в своей IDE, но это хрупко для других людей, пытающихся его скомпилировать.
foo/CMakeLists.txt
cmake_minimum_required (ВЕРСИЯ 3.10) проект (фу) add_subdirectory (библиотека) add_subdirectory (тесты) foo/library/CMakeLists.txt
add_library(foo SHARED foo.cpp foo.h) foo/tests/CMakeLists.txt
enable_testing() включить (FetchContent) FetchContent_Declare( Googletest URL https://github.com/google/googletest/ar ... 3591e5.zip ) FetchContent_MakeAvailable (googletest) include_directories(../библиотека) add_executable(foo_test foo_test.cpp) target_link_libraries (foo_test PRIVATE gtest_main foo) включить (GoogleTest) gtest_discover_tests(foo_test) точный вывод ошибок
[1/1 5.1/сек] Связывание исполняемых файлов CXX с тестами/foo_test ПРОШЛО: тесты/foo_test тесты/foo_test[1]_tests.cmake : && /usr/lib/ccache/clang++-11 --target=x86_64-pc-linux-gnu --sysroot=/ -gtests/CMakeFiles/foo_test.dir/foo_test.cpp.o -otests/foo_test -L /home/adam/workspace-qt/foo/tests/../library -Wl,-rpath,home/adam/workspace-qt/foo/tests/../library:home/adam/workspace-qt/build- foo-Clang_Desktop-Debug/library lib/libgtest_maind.a Library/libfoo.so mbedtls/library/libmbedtls.a lib/libgtestd.a -lpthread mbedtls/library/libmbedx509.a mbedtls/library/libmbedcrypto.a && cd /home/ adam/workspace-qt/build-foo-Clang_Desktop-Debug/tests && /home/adam/Qt/Tools/CMake/bin/cmake -D TEST_TARGET=foo_test -D TEST_EXECUTABLE=/home/adam/workspace-qt/build- foo-Clang_Desktop-Debug/tests/foo_test -D TEST_EXECUTOR= -D TEST_WORKING_DIR=/home/adam/workspace-qt/build-foo-Clang_Desktop-Debug/tests -D TEST_EXTRA_ARGS= -D TEST_PROPERTIES= -D TEST_PREFIX= -D TEST_SUFFIX = -D NO_PRETTY_TYPES=FALSE -D NO_PRETTY_VALUES=FALSE -D TEST_LIST=foo_test_TESTS -D CTEST_FILE=/home/adam/workspace-qt/build-foo-Clang_Desktop-Debug/tests/foo_test[1]_tests.cmake -D TEST_DISCOVERY_TIMEOUT= 5 -D TEST_XML_OUTPUT_DIR= -P /home/adam/Qt/Tools/CMake/share/cmake-3.19/Modules/GoogleTestAddTests.cmake /home/adam/workspace-qt/build-foo-Clang_Desktop-Debug/tests/foo_test: ошибка при загрузке общих библиотек: libfoo.so: невозможно открыть общий объектный файл: нет такого файла или каталога Ошибка CMake в /home/adam/Qt/Tools/CMake/share/cmake-3.19/Modules/GoogleTestAddTests.cmake:77 (сообщение): Ошибка при запуске тестового исполняемого файла. Путь: '/home/adam/workspace-qt/build-foo-Clang_Desktop-Debug/tests/foo_test' Результат: 127 Выход: Стек вызовов (сначала самый последний вызов): /home/adam/Qt/Tools/CMake/share/cmake-3.19/Modules/GoogleTestAddTests.cmake:173 (gtest_discover_tests_impl) ниндзя: сборка остановлена: подкоманда не выполнена. 15:56:10: Процесс «/home/adam/Qt/Tools/CMake/bin/cmake» завершился с кодом 1. Ошибка при сборке/развертывании проекта foo (комплект: Clang-Desktop) При выполнении шага «Сборка» 15:56:10: Прошедшее время: 00:01. РЕДАКТИРОВАТЬ:
Обсуждение с @Tsyvarev показало, что QtCreator, возможно, не помещает полный путь в RPATH/RUNPATH. (т.е. «дом/...» вместо «/дом/...»).
У меня есть проект CMAKE, который содержит два подкаталога: библиотеку и тесты. Когда приходит время перечислить тесты, gtest_discover_tests запускает исполняемый файл теста, но поскольку исполняемый файл теста находится в родственном каталоге тестируемой библиотеки, он, похоже, не находит его. Если я запускаю его через терминал и устанавливаю LD_LIBRARY_PATH, все работает нормально. Есть ли способ CMAKE установить LD_LIBRARY_PATH для процесса компиляции? Я могу принудительно использовать его в своей IDE, но это хрупко для других людей, пытающихся его скомпилировать.
foo/CMakeLists.txt
cmake_minimum_required (ВЕРСИЯ 3.10) проект (фу) add_subdirectory (библиотека) add_subdirectory (тесты) foo/library/CMakeLists.txt
add_library(foo SHARED foo.cpp foo.h) foo/tests/CMakeLists.txt
enable_testing() включить (FetchContent) FetchContent_Declare( Googletest URL https://github.com/google/googletest/ar ... 3591e5.zip ) FetchContent_MakeAvailable (googletest) include_directories(../библиотека) add_executable(foo_test foo_test.cpp) target_link_libraries (foo_test PRIVATE gtest_main foo) включить (GoogleTest) gtest_discover_tests(foo_test) точный вывод ошибок
[1/1 5.1/сек] Связывание исполняемых файлов CXX с тестами/foo_test ПРОШЛО: тесты/foo_test тесты/foo_test[1]_tests.cmake : && /usr/lib/ccache/clang++-11 --target=x86_64-pc-linux-gnu --sysroot=/ -gtests/CMakeFiles/foo_test.dir/foo_test.cpp.o -otests/foo_test -L /home/adam/workspace-qt/foo/tests/../library -Wl,-rpath,home/adam/workspace-qt/foo/tests/../library:home/adam/workspace-qt/build- foo-Clang_Desktop-Debug/library lib/libgtest_maind.a Library/libfoo.so mbedtls/library/libmbedtls.a lib/libgtestd.a -lpthread mbedtls/library/libmbedx509.a mbedtls/library/libmbedcrypto.a && cd /home/ adam/workspace-qt/build-foo-Clang_Desktop-Debug/tests && /home/adam/Qt/Tools/CMake/bin/cmake -D TEST_TARGET=foo_test -D TEST_EXECUTABLE=/home/adam/workspace-qt/build- foo-Clang_Desktop-Debug/tests/foo_test -D TEST_EXECUTOR= -D TEST_WORKING_DIR=/home/adam/workspace-qt/build-foo-Clang_Desktop-Debug/tests -D TEST_EXTRA_ARGS= -D TEST_PROPERTIES= -D TEST_PREFIX= -D TEST_SUFFIX = -D NO_PRETTY_TYPES=FALSE -D NO_PRETTY_VALUES=FALSE -D TEST_LIST=foo_test_TESTS -D CTEST_FILE=/home/adam/workspace-qt/build-foo-Clang_Desktop-Debug/tests/foo_test[1]_tests.cmake -D TEST_DISCOVERY_TIMEOUT= 5 -D TEST_XML_OUTPUT_DIR= -P /home/adam/Qt/Tools/CMake/share/cmake-3.19/Modules/GoogleTestAddTests.cmake /home/adam/workspace-qt/build-foo-Clang_Desktop-Debug/tests/foo_test: ошибка при загрузке общих библиотек: libfoo.so: невозможно открыть общий объектный файл: нет такого файла или каталога Ошибка CMake в /home/adam/Qt/Tools/CMake/share/cmake-3.19/Modules/GoogleTestAddTests.cmake:77 (сообщение): Ошибка при запуске тестового исполняемого файла. Путь: '/home/adam/workspace-qt/build-foo-Clang_Desktop-Debug/tests/foo_test' Результат: 127 Выход: Стек вызовов (сначала самый последний вызов): /home/adam/Qt/Tools/CMake/share/cmake-3.19/Modules/GoogleTestAddTests.cmake:173 (gtest_discover_tests_impl) ниндзя: сборка остановлена: подкоманда не выполнена. 15:56:10: Процесс «/home/adam/Qt/Tools/CMake/bin/cmake» завершился с кодом 1. Ошибка при сборке/развертывании проекта foo (комплект: Clang-Desktop) При выполнении шага «Сборка» 15:56:10: Прошедшее время: 00:01. РЕДАКТИРОВАТЬ:
Обсуждение с @Tsyvarev показало, что QtCreator, возможно, не помещает полный путь в RPATH/RUNPATH. (т.е. «дом/...» вместо «/дом/...»).
Мобильная версия