CMake с использованием GTest под Windows 10 - фатальная ошибка LNK1104: не удается открыть файл 'gtest.lib', но присутствует отладка 'gtestd.lib' - PullRequest
0 голосов
/ 27 августа 2018

Я уже некоторое время борюсь с этой проблемой: я использую CMake и GTest под Windows 10, но я получаю

(Link target) -> LINK : fatal error LNK1104: cannot open file 'gtest.lib' 

, но отладочную версию lib 'gtestd.lib 'находится в правильной папке. Я использую простую структуру папок:

test [folder]
 - CMakeLists.txt
 - test.cpp

Это означает, что GTest каким-то образом компилируется под целью отладки (которую я не смог форсировать даже с CMAKE_ARGS -DCMAKE_BUILD_TYPE = Release), и CMake генерирует виртуальную сущность VS, которая не распознает эту цель отладки GTest и пытается установить связь с версией выпуска 'gtest.lib', которая не существует.

  • Пожалуйста, помогите мнеКак написать правильный файл CMake для этого простого тестирования и решить эту проблему.
  • Кроме того, какой должна быть правильная цель GTest, я полагаю, что это Release, поскольку меня не интересует отладка библиотек GTest?

Мой тест CMakeLists:

cmake_minimum_required(VERSION 2.8.12)

# Third-party library
include(ExternalProject)
ExternalProject_Add(googletest
    PREFIX "${CMAKE_BINARY_DIR}/lib"
    GIT_REPOSITORY "https://github.com/google/googletest.git"
    GIT_TAG "master"
    CMAKE_ARGS  -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/lib/installed
)

# Define ${CMAKE_INSTALL_...} variables
include(GNUInstallDirs)

# Specify where third-party libraries are located
link_directories(${CMAKE_BINARY_DIR}/lib/installed/${CMAKE_INSTALL_LIBDIR})
include_directories(${CMAKE_BINARY_DIR}/lib/installed/${CMAKE_INSTALL_INCLUDEDIR})

# This is required for googletest
find_package(Threads REQUIRED)

# target_sources 
# target_sources(cmake-sample2-main PUBLIC "../src/main.c")
set( SOURCES_TEST test.cpp )

# Test
add_executable(EmotionsModelLibraryTest ${SOURCES_TEST})
# Define the libraries this project depends upon
target_link_libraries(EmotionsModelLibraryTest libEmotionsModelLibrary gtest Threads::Threads)
# Make sure third-party is built before executable
add_dependencies(EmotionsModelLibraryTest googletest)

# has target scope—it adds x/y to the include path for target t.
# You want the former one if all of your targets use the include directories in question. You want the latter one if the path is specific to a target, or if you want finer control of the path's visibility. The latter comes from the fact that target_include_directories() supports the PRIVATE, PUBLIC, and INTERFACE qualifiers.
target_include_directories(EmotionsModelLibraryTest PRIVATE ${CMAKE_SOURCE_DIR}/include)

#possibly add to main after subdirectory
add_test(MyEmotionsModelLibraryTest EmotionsModelLibraryTest)

ps Если я вручную установлю Linker> Additional Dependencies в 'gtestd.lib', он будет создан без проблем.Также под Ubuntu 18.04 отлично работает CMake с использованием GTest

...