Неожиданное поведение VS 2017 при компиляции проекта CMake, работающего в Linux - PullRequest
0 голосов
/ 31 января 2019

У меня есть проект CMake, который отлично работает в Linux с g ++.

В Windows (10, Creators Update) CMake работает нормально и генерирует соответствующие файлы.

Поэтому я открыл TestProject.slnФайл решения и для пробного запуска я запустил «Локальный отладчик Windows» и получил эту ошибку.

Error   LNK1104 cannot open file 'jsoncpp.lib'

Вот как я настроил этот проект.

.
|-root
|  |- src
|  |- lib
|  |- bin
|  |- app
|  |- include
|  |- extras
|        |- jsoncpp
|-build

I 'я не совсем уверен, что здесь может быть не так.

Я добавил jsoncpp как подмодуль.

Я сделал

git submodule update --init --recursive

, и в jsoncpp.lib есть файл

root\lib\Debug

Это мой CMakeLists.txt

cmake_minimum_required (VERSION 3.13)
project (TestProject)

set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/root/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/root/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/root/bin)

set(SOURCE_DIR ${PROJECT_SOURCE_DIR}/root/src)
set(INCLUDE_DIR ${PROJECT_SOURCE_DIR}/root/include)
set(EXTRAS_DIR ${PROJECT_SOURCE_DIR}/root/extras)
set(PROJECT_MAIN_DIR ${PROJECT_SOURCE_DIR}/root/app)

set(SOURCES
  ${INCLUDE_DIR}/Combinations.hpp  
  ${INCLUDE_DIR}/Lib.hpp  
  ${SOURCE_DIR}/Lib.cpp
  )

add_executable(TestProject ${PROJECT_MAIN_DIR}/Main.cpp ${SOURCES})

add_subdirectory(${EXTRAS_DIR}/jsoncpp jsoncpp)

target_link_libraries(TestProject jsoncpp)

set_target_properties(TestProject PROPERTIES
  CXX_STANDARD_REQUIRED ON
  CXX_STANDARD 17
  CXX_EXTENSIONS OFF
  )

Это вывод CMake

Selecting Windows SDK version 10.0.17763.0 to target Windows 10.0.17134.
The C compiler identification is MSVC 19.16.27026.1
The CXX compiler identification is MSVC 19.16.27026.1
Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.16.27023/bin/Hostx86/x86/cl.exe
Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.16.27023/bin/Hostx86/x86/cl.exe -- works
Detecting C compiler ABI info
Detecting C compiler ABI info - done
Detecting C compile features
Detecting C compile features - done
Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.16.27023/bin/Hostx86/x86/cl.exe
Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.16.27023/bin/Hostx86/x86/cl.exe -- works
Detecting CXX compiler ABI info
Detecting CXX compiler ABI info - done
Detecting CXX compile features
Detecting CXX compile features - done
JsonCpp Version: 1.8.4
Looking for C++ include clocale
Looking for C++ include clocale - found
Looking for localeconv
Looking for localeconv - found
Looking for C++ include sys/types.h
Looking for C++ include sys/types.h - found
Looking for C++ include stdint.h
Looking for C++ include stdint.h - found
Looking for C++ include stddef.h
Looking for C++ include stddef.h - found
Check size of lconv
Check size of lconv - done
Performing Test HAVE_DECIMAL_POINT
Performing Test HAVE_DECIMAL_POINT - Success
Found PythonInterp: C:/Users/USERNAME/emacs-26.1-x86_64/bin/python2.exe (found suitable version "2.7.14", minimum required is "2.6") 
Configuring done
Generating done

Я не очень знаком с Visual Studio, ноглядя на ошибку, он говорит «не могу открыть», а не «не могу найти», поэтому моя первая мысль была, возможно, это проблема с разрешением.

Итак, я загрузил VS с правами администратора, но ошибка не исчезла.

Я подумал, что, может быть, есть какая-то проблема с компилятором, поэтому я использовал nmake.exe в качестве компилятора (после генерации make-файлов nmake), но не повезлолибо там.

Я не уверен, что это проблема компоновщика, так как CMake смог найти и связать библиотеку jsoncpp, поэтому я сомневаюсь, что CMake допустил ошибку при создании Makefile.

Я неуверен, как мне следует отладить проблему.

...