Использование cmake.js с тестом Google для тестирования надстройки node.js

Я пытаюсь протестировать надстройку node-js (построенную с помощью cmake-js) с помощью теста Google. Я строю на Mac OS.

Цель аддона собирается и работает нормально, но у меня проблемы с целью googletest.

Я получаю ошибки связывания, связанные с неопределенными методами V8.

В CMakeLists.txt я напечатал (с сообщением) переменные CMAKE_JS_SRC и CMAKE_JS_LIB, и они обе пусты. Если CMAKE_JS_LIB пуст, я не понимаю, как target_link_libraries() должен работать, чтобы добавить библиотеку node/v8 в мой тестовый исполняемый файл...

Если вместо использования add_executable() я использую add_library(), цель google_test создается, но, конечно, я не могу ее запустить, поскольку она больше не является исполняемым файлом.

Вы можете помочь?

Ниже мой CMakeLists.txt:

      make_minimum_required(VERSION 3.14)

include_directories(my_project)

set(CMAKE_CXX_STANDARD 14)
set(CMAKE_C_FLAGS "-Wno-pointer-sign -fno-signed-char -std=c99 -fpermissive")
set(CMAKE_CXX_FLAGS "-Wno-pointer-sign -fno-signed-char -std=c99 -fpermissive")

project (addon)

include(FetchContent)

FetchContent_Declare(
  googletest
  GIT_REPOSITORY https://github.com/google/googletest.git
  GIT_TAG release-1.12.1
)
FetchContent_MakeAvailable(googletest)
include_directories(${CMAKE_JS_INC} "my_project/include/pkcs11/v2.40/")
file(GLOB SOURCE_FILES "my_project/*.c" "my_project/*.h" "my_project/*.cpp")
add_library(${PROJECT_NAME} SHARED ${SOURCE_FILES} ${CMAKE_JS_SRC})

set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "" SUFFIX ".node")
target_link_libraries(${PROJECT_NAME} ${CMAKE_JS_LIB} )
## google_test
enable_testing()
file(GLOB TEST_FILES "test/*.cc" "test/utils/*.c")

add_executable(
  my_project_google_test
  ${TEST_FILES)
)
target_include_directories(my_project_google_test
PRIVATE
test/utils/*.h
)

target_link_libraries(
  my_project_google_test
  PRIVATE
  GTest::gtest_main
  ${CMAKE_JS_LIB}
)

include(GoogleTest)
gtest_discover_tests(my_project_google_test)

1 ответ

CMAKE_JS_LIBпусто везде, кроме винды.

Установите v8 из Homebrew, если вы еще этого не сделали:brew install v8.

Связать приложение с v8

      target_link_libraries(
  my_project_google_test
  PRIVATE
  v8
)

Могут потребоваться другие библиотеки v8, вы не опубликовали все ошибки:v8_libbase v8_libplatform.

Другие вопросы по тегам