Совместная библиотека CMake в Windows: ошибка при создании dll - PullRequest
0 голосов
/ 09 января 2019

Использование CMake (версия 3.13.2) для создания общей библиотеки C в Windows с компилятором MSVC (версия 19.16.27025.1). Я получаю следующую ошибку:

Erreur  MSB3073 La commande "setlocal
cd "\\vmware-host\Shared Folders\Documents\funnel\build\getopt"
if %errorlevel% neq 0 goto :cmEnd
"C:\Program Files\CMake\bin\cmake.exe" -E __create_def "//vmware- 
host/Shared 
Folders/Documents/funnel/build/getopt/getopt.dir/Debug/exports.def" 
"//vmware-host/Shared 
Folders/Documents/funnel/build/getopt/getopt.dir/Debug//objects.txt"
if %errorlevel% neq 0 goto :cmEnd
:cmEnd
endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone
:cmErrorLevel
exit /b %1
:cmDone
if %errorlevel% neq 0 goto :VCEnd
:VCEnd" s'est arrêtée avec le code 1.

Некоторые выдержки из файлов CMakeLists.txt, определяющих параметры сборки:

# CMakeLists.txt in root
add_compile_options(/Wall /c)
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
add_subdirectory(getopt)

# CMakeLists.txt in root/getopt
set(src_files getopt.c getopt1.c)
set(hdr_files ansidecl.h getopt.h)
add_library(getopt SHARED "${src_files}" "${hdr_files}")

(Сборка STATIC библиотеки в Windows в порядке. Сборка SHARED библиотеки в Linux с gcc в порядке.)

- РЕДАКТИРОВАТЬ (отвечая на комментарий vre) -

Выполнение set_target_properties перед вызовом add_library приводит к следующей ошибке.

set_target_properties Can not find target to add properties to: getopt

Запуск cmake с предложенным генератором дает следующее (возможно, потому что компилятор не установлен в моей системе, хотя он предлагается в списке, возвращаемом cmake -H: установка этой версии поможет?).

-- Selecting Windows SDK version  to target Windows 10.0.17763.
CMake Error at CMakeLists.txt:6 (project):
  Failed to run MSBuild command:

    MSBuild.exe

  to get the value of VCTargetsPath:

    Le fichier spécifié est introuvable

Запуск cmake --build [...] с консоли (предварительно сгенерировав систему сборки с Visual Studio 15 2017) приводит к следующей ошибке.

"\\vmware-host\Shared Folders\Documents\funnel\build\ALL_BUILD.vcxproj" (cible par défaut) (1) ->
"\\vmware-host\Shared Folders\Documents\funnel\build\src\exe.vcxproj" (cible par défaut) (3) ->
"\\vmware-host\Shared Folders\Documents\funnel\build\getopt\getopt.vcxproj" (cible par défaut) (4) ->
(PreLinkEvent cible) ->
  C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(13
3,5): error MSB3073: La commande "setlocal [\\vmware-host\Shared Folders\Documents\funnel\build\getopt\getopt.vcxproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(133,
5): error MSB3073: cd "\\vmware-host\Shared Folders\Documents\funnel\build\getopt" [\\vmware-host\Shared Folders\Docume
nts\funnel\build\getopt\getopt.vcxproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(133,
5): error MSB3073: if %errorlevel% neq 0 goto :cmEnd [\\vmware-host\Shared Folders\Documents\funnel\build\getopt\getopt
.vcxproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(133,
5): error MSB3073: "C:\Program Files\CMake\bin\cmake.exe" -E __create_def "//vmware-host/Shared Folders/Documents/funne
l/build/getopt/getopt.dir/Release/exports.def" "//vmware-host/Shared Folders/Documents/funnel/build/getopt/getopt.dir/R
elease//objects.txt" [\\vmware-host\Shared Folders\Documents\funnel\build\getopt\getopt.vcxproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(133,
5): error MSB3073: if %errorlevel% neq 0 goto :cmEnd [\\vmware-host\Shared Folders\Documents\funnel\build\getopt\getopt
.vcxproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(133,
5): error MSB3073: :cmEnd [\\vmware-host\Shared Folders\Documents\funnel\build\getopt\getopt.vcxproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(133,
5): error MSB3073: endlocal & call :cmErrorLevel %errorlevel% & goto :cmDone [\\vmware-host\Shared Folders\Documents\fu
nnel\build\getopt\getopt.vcxproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(133,
5): error MSB3073: :cmErrorLevel [\\vmware-host\Shared Folders\Documents\funnel\build\getopt\getopt.vcxproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(133,
5): error MSB3073: exit /b %1 [\\vmware-host\Shared Folders\Documents\funnel\build\getopt\getopt.vcxproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(133,
5): error MSB3073: :cmDone [\\vmware-host\Shared Folders\Documents\funnel\build\getopt\getopt.vcxproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(133,
5): error MSB3073: if %errorlevel% neq 0 goto :VCEnd [\\vmware-host\Shared Folders\Documents\funnel\build\getopt\getopt
.vcxproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets\Microsoft.CppCommon.targets(133,
5): error MSB3073: :VCEnd" s'est arrêtée avec le code 1. [\\vmware-host\Shared Folders\Documents\funnel\build\getopt\ge
topt.vcxproj]
...