У меня есть проект C ++ на основе cmake на github, который создается с помощью Travis CI. Файл .travis.yml для сборки на OSX с clang имеет следующее:
language: cpp
jobs:
include:
- os: osx
compiler: gcc
osx_image: xcode11.2
env:
- GCC_VER="9"
- MATRIX_EVAL="CC=gcc-${GCC_VER} && CXX=g++-${GCC_VER}"
addons:
homebrew:
packages:
- cppunit
- mruby
... (other OS) ...
before_script:
- eval "${MATRIX_EVAL}"
script:
- cmake -D ENABLE_TESTS:BOOL=TRUE .
- cmake --build . -- -j2
- ctest -j2
CppUnit устанавливается brew
.
Команда cmake работает нормально и находит CppUnit в /usr/local
(т.е. CPPUNIT_INDLUE_DIR
правильно установлен на /usr/local/include
, а CPPUNIT_LIBRARIES
правильно установлен на /usr/local/lib/libcppunit.dylib
. Однако при построении тестов я получаю ошибки ссылок о неопределенных символах, связанных с cppunit, что указывает на то, что он неправильно связывается с cppunit.
Тот же проект отлично работает на моем MacBook (также с установленным cppunit), и он правильно строится на Linux как с g cc -9, так и с clang, с cppunit, установленным через apt.
Я думал, что мне нужно где-то установить DYLD_LIBRARY_PATH=$DYLD_LIBRARY_PATH:/usr/local/lib
, но когда я это сделаю, я получаю новые ошибки:
$ cmake -D ENABLE_TESTS:BOOL=TRUE .
dyld: Symbol not found: __cg_jpeg_resync_to_restart
Referenced from: /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
Expected in: /usr/local/lib/libJPEG.dylib
in /System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO
/Users/travis/.travis/functions: line 109: 3565 Abort trap: 6 cmake -D ENABLE_TESTS:BOOL=TRUE .
The command "cmake -D ENABLE_TESTS:BOOL=TRUE ." exited with 134.
Вот файл CMakeLists.txt в root источника:
cmake_minimum_required (VERSION 3.1)
project (mrbind17 CXX)
set (CMAKE_CXX_STANDARD 17)
set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
"${CMAKE_CURRENT_SOURCE_DIR}/cmake")
add_definitions(-g)
option(ENABLE_TESTS "Build tests. May require CppUnit_ROOT" OFF)
include_directories (${CMAKE_CURRENT_SOURCE_DIR}/include)
find_package (Mruby REQUIRED)
include_directories (${Mruby_INCLUDE_DIR})
find_package (CppUnit)
if (CPPUNIT_FOUND)
message(STATUS "CppUnit found, unit tests will be compiled")
message(STATUS "CPPUNIT_INCLUDE_DIR : ${CPPUNIT_INCLUDE_DIR}")
message(STATUS "CPPUNIT_LIBRARIES : ${CPPUNIT_LIBRARIES}")
include_directories(${CPPUNIT_INCLUDE_DIR})
enable_testing()
if(${ENABLE_TESTS})
add_subdirectory (test)
endif(${ENABLE_TESTS})
else (CPPUNIT_FOUND)
message(STATUS "CppUnit not found, unit tests will not be compiled")
endif (CPPUNIT_FOUND)
и CMakeLists.txt в тестовом каталоге:
add_executable(interpreter_test main.cpp interpreter_test.cpp)
target_link_libraries(interpreter_test ${Mruby_LIBRARIES} ${CPPUNIT_LIBRARIES})
add_test(NAME interpreter_test COMMAND ./interpreter_test interpreter_test.xml)
add_executable(function_test main.cpp function_test.cpp)
target_link_libraries(function_test ${Mruby_LIBRARIES} ${CPPUNIT_LIBRARIES})
add_test(NAME function_test COMMAND ./function_test function_test.xml)
add_executable(module_test main.cpp module_test.cpp)
target_link_libraries(module_test ${Mruby_LIBRARIES} ${CPPUNIT_LIBRARIES})
add_test(NAME module_test COMMAND ./module_test module_test.xml)
Что я могу сделать, чтобы правильно использовать ссылку cmake на cppunit?