Skip to content

CMake build fails when build folder contains whitespace #34

@koplas

Description

@koplas

How to reproduce:

  • Clone HarbourMasters/Shipwright
  • Configure this CMake project inside a path that contains whitespace, for me it was
    C:\Users\Firstname LastName\source\repos\koplas\Shipwright
  • Linking fails
>------ Build started: Project: CMakeLists, Configuration: Debug ------
  [1/2] Linking CXX executable ZAPD\ZAPD.exe
  FAILED: ZAPD/ZAPD.exe 
  C:\Windows\system32\cmd.exe /C "cd . && "C:\Program Files\Microsoft Visual Studio\18\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe" -E vs_link_exe --msvc-ver=1950 --intdir=ZAPD\CMakeFiles\ZAPD.dir --rc=C:\PROGRA~2\WI3CF2~1\10\bin\100261~1.0\x64\rc.exe --mt=C:\PROGRA~2\WI3CF2~1\10\bin\100261~1.0\x64\mt.exe --manifests  -- C:\PROGRA~1\MICROS~1\18\COMMUN~1\VC\Tools\MSVC\1450~1.357\bin\Hostx64\x64\link.exe /nologo ZAPD\CMakeFiles\ZAPD.dir\ExecutableMain.cpp.obj  /out:ZAPD\ZAPD.exe /implib:ZAPD\ZAPD.lib /pdb:ZAPD\ZAPD.pdb /version:0.0 /machine:x64 /debug /INCREMENTAL /subsystem:console  ZAPD\ZAPDLib.lib  -WHOLEARCHIVE:C:/Users/Paul Schwabauer/source/repos/koplas/Shipwright/x64/Debug/OTRExporter.lib  libultraship\src\libultraship.lib  libultraship\ImGui.lib  vcpkg\installed\x64-windows-static\debug\lib\SDL2-staticd.lib  kernel32.lib  user32.lib  gdi32.lib  winmm.lib  imm32.lib  ole32.lib  oleaut32.lib  version.lib  uuid.lib  setupapi.lib  dinput8.lib  vcpkg\installed\x64-windows-static\debug\lib\manual-link\SDL2maind.lib  shell32.lib  vcpkg\installed\x64-windows-static\debug\lib\libglew32d.lib  opengl32.lib  libultraship\stb.lib  libultraship\libgfxd.lib  vcpkg\installed\x64-windows-static\debug\lib\zip.lib  advapi32.lib  vcpkg\installed\x64-windows-static\debug\lib\bz2d.lib  bcrypt.lib  vcpkg\installed\x64-windows-static\debug\lib\zlibd.lib  vcpkg\installed\x64-windows-static\debug\lib\tinyxml2.lib  vcpkg\installed\x64-windows-static\debug\lib\spdlogd.lib  vcpkg\installed\x64-windows-static\debug\lib\fmtd.lib  _deps\prism-build\prism.lib  vcpkg\installed\x64-windows-static\debug\lib\spdlogd.lib  vcpkg\installed\x64-windows-static\debug\lib\fmtd.lib  _deps\stormlib-build\StormLib.lib  vcpkg\installed\x64-windows-static\debug\lib\zlibd.lib  vcpkg\installed\x64-windows-static\debug\lib\bz2d.lib  wininet.lib  vcpkg\installed\x64-windows-static\debug\lib\libpng16d.lib  vcpkg\installed\x64-windows-static\debug\lib\zlibd.lib  kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib && C:\Windows\system32\cmd.exe /C "cd /D "C:\Users\Paul Schwabauer\source\repos\koplas\Shipwright\out\build\x64-Debug\ZAPD" && C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -noprofile -executionpolicy Bypass -file "C:/Users/Paul Schwabauer/source/repos/koplas/Shipwright/out/build/x64-Debug/vcpkg/scripts/buildsystems/msbuild/applocal.ps1" -targetBinary "C:/Users/Paul Schwabauer/source/repos/koplas/Shipwright/out/build/x64-Debug/ZAPD/ZAPD.exe" -installedDir "C:/Users/Paul Schwabauer/source/repos/koplas/Shipwright/out/build/x64-Debug/vcpkg/installed/x64-windows-static/debug/bin" -OutVariable out""
  LINK Pass 1: command "C:\PROGRA~1\MICROS~1\18\COMMUN~1\VC\Tools\MSVC\1450~1.357\bin\Hostx64\x64\link.exe /nologo ZAPD\CMakeFiles\ZAPD.dir\ExecutableMain.cpp.obj /out:ZAPD\ZAPD.exe /implib:ZAPD\ZAPD.lib /pdb:ZAPD\ZAPD.pdb /version:0.0 /machine:x64 /debug /INCREMENTAL /subsystem:console ZAPD\ZAPDLib.lib -WHOLEARCHIVE:C:/Users/Paul Schwabauer/source/repos/koplas/Shipwright/x64/Debug/OTRExporter.lib libultraship\src\libultraship.lib libultraship\ImGui.lib vcpkg\installed\x64-windows-static\debug\lib\SDL2-staticd.lib kernel32.lib user32.lib gdi32.lib winmm.lib imm32.lib ole32.lib oleaut32.lib version.lib uuid.lib setupapi.lib dinput8.lib vcpkg\installed\x64-windows-static\debug\lib\manual-link\SDL2maind.lib shell32.lib vcpkg\installed\x64-windows-static\debug\lib\libglew32d.lib opengl32.lib libultraship\stb.lib libultraship\libgfxd.lib vcpkg\installed\x64-windows-static\debug\lib\zip.lib advapi32.lib vcpkg\installed\x64-windows-static\debug\lib\bz2d.lib bcrypt.lib vcpkg\installed\x64-windows-static\debug\lib\zlibd.lib vcpkg\installed\x64-windows-static\debug\lib\tinyxml2.lib vcpkg\installed\x64-windows-static\debug\lib\spdlogd.lib vcpkg\installed\x64-windows-static\debug\lib\fmtd.lib _deps\prism-build\prism.lib vcpkg\installed\x64-windows-static\debug\lib\spdlogd.lib vcpkg\installed\x64-windows-static\debug\lib\fmtd.lib _deps\stormlib-build\StormLib.lib vcpkg\installed\x64-windows-static\debug\lib\zlibd.lib vcpkg\installed\x64-windows-static\debug\lib\bz2d.lib wininet.lib vcpkg\installed\x64-windows-static\debug\lib\libpng16d.lib vcpkg\installed\x64-windows-static\debug\lib\zlibd.lib kernel32.lib user32.lib gdi32.lib winspool.lib shell32.lib ole32.lib oleaut32.lib uuid.lib comdlg32.lib advapi32.lib /MANIFEST /MANIFESTFILE:ZAPD\CMakeFiles\ZAPD.dir/intermediate.manifest ZAPD\CMakeFiles\ZAPD.dir/manifest.res" failed (exit code 1104) with the following output:
  
C:\Users\Paul Schwabauer\source\repos\koplas\Shipwright\out\build\x64-Debug\LINK : fatal error LNK1104: cannot open file 'Schwabauer\source\repos\koplas\Shipwright\x64\Debug\OTRExporter.lib'
  
  
  [2/2] Linking CXX executable "C:\Users\Paul Schwabauer\source\repos\koplas\Shipwright\x64\Debug\soh.exe"; Copying asset xmls...
  FAILED: C:/Users/Paul Schwabauer/source/repos/koplas/Shipwright/x64/Debug/soh.exe 
  C:\Windows\system32\cmd.exe /C "cd . && "C:\Program Files\Microsoft Visual Studio\18\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe" -E vs_link_exe --msvc-ver=1950 --intdir=soh\CMakeFiles\soh.dir --rc=C:\PROGRA~2\WI3CF2~1\10\bin\100261~1.0\x64\rc.exe --mt=C:\PROGRA~2\WI3CF2~1\10\bin\100261~1.0\x64\mt.exe --manifests  -- C:\PROGRA~1\MICROS~1\18\COMMUN~1\VC\Tools\MSVC\1450~1.357\bin\Hostx64\x64\link.exe /nologo @CMakeFiles\soh.rsp  /out:"C:\Users\Paul Schwabauer\source\repos\koplas\Shipwright\x64\Debug\soh.exe" /implib:"C:\Users\Paul Schwabauer\source\repos\koplas\Shipwright\x64\Debug\soh.lib" /pdb:"C:\Users\Paul Schwabauer\source\repos\koplas\Shipwright\x64\Debug\soh.pdb" /version:0.0 /subsystem:console /INCREMENTAL /MANIFEST:NO /DEBUG /SUBSYSTEM:WINDOWS && C:\Windows\system32\cmd.exe /C "cd /D "C:\Users\Paul Schwabauer\source\repos\koplas\Shipwright\out\build\x64-Debug\soh" && C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -noprofile -executionpolicy Bypass -file "C:/Users/Paul Schwabauer/source/repos/koplas/Shipwright/out/build/x64-Debug/vcpkg/scripts/buildsystems/msbuild/applocal.ps1" -targetBinary "C:/Users/Paul Schwabauer/source/repos/koplas/Shipwright/x64/Debug/soh.exe" -installedDir "C:/Users/Paul Schwabauer/source/repos/koplas/Shipwright/out/build/x64-Debug/vcpkg/installed/x64-windows-static/debug/bin" -OutVariable out && cd /D "C:\Users\Paul Schwabauer\source\repos\koplas\Shipwright\out\build\x64-Debug\soh" && "C:\Program Files\Microsoft Visual Studio\18\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe" -E copy_directory_if_different "C:/Users/Paul Schwabauer/source/repos/koplas/Shipwright/soh/assets/extractor" "C:/Users/Paul Schwabauer/source/repos/koplas/Shipwright/x64/Debug/assets" && "C:\Program Files\Microsoft Visual Studio\18\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe" -E copy_directory_if_different "C:/Users/Paul Schwabauer/source/repos/koplas/Shipwright/soh/assets/xml" "C:/Users/Paul Schwabauer/source/repos/koplas/Shipwright/x64/Debug/assets/xml" && "C:\Program Files\Microsoft Visual Studio\18\Community\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe" -E make_directory "C:/Users/Paul Schwabauer/source/repos/koplas/Shipwright/x64/Debug/assets/symbols"""
  LINK: command "C:\PROGRA~1\MICROS~1\18\COMMUN~1\VC\Tools\MSVC\1450~1.357\bin\Hostx64\x64\link.exe /nologo @CMakeFiles\soh.rsp /out:C:\Users\Paul Schwabauer\source\repos\koplas\Shipwright\x64\Debug\soh.exe /implib:C:\Users\Paul Schwabauer\source\repos\koplas\Shipwright\x64\Debug\soh.lib /pdb:C:\Users\Paul Schwabauer\source\repos\koplas\Shipwright\x64\Debug\soh.pdb /version:0.0 /subsystem:console /INCREMENTAL /MANIFEST:NO /DEBUG /SUBSYSTEM:WINDOWS" failed (exit code 1104) with the following output:
  
C:\Users\Paul Schwabauer\source\repos\koplas\Shipwright\out\build\x64-Debug\LINK : fatal error LNK1104: cannot open file 'Schwabauer\source\repos\koplas\Shipwright\x64\Debug\OTRExporter.lib'
  
  
  ninja: build stopped: subcommand failed.

Build failed.

To fix apply this patch:

diff --git a/ZAPD/CMakeLists.txt b/ZAPD/CMakeLists.txt
index ab7ab7e..726144f 100644
--- a/ZAPD/CMakeLists.txt
+++ b/ZAPD/CMakeLists.txt
@@ -447,7 +447,7 @@ if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
 #      if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64")
                set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
                set(ADDITIONAL_LIBRARY_DEPENDENCIES
-                       "-WHOLEARCHIVE:$<TARGET_LINKER_FILE_DIR:OTRExporter>/$<TARGET_LINKER_FILE_NAME:OTRExporter>"
+                       "-WHOLEARCHIVE:\"$<TARGET_FILE:OTRExporter>\""
                        "libultraship;"
                        storm
                        PNG::PNG

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions