112 Dependency bug from cmake 3.17

Starting from version 3.17, ceda-core doesn't build correctly. It appears to ignore a dependency - i.e. the build order is wrong. For a while now, we have been downloading/installing/using cmake v3.16. It's about time we fixed this issue.

It might be a good idea to study the CMake 3.17 Release Notes.

Some things that might be relevant:

  • The add_custom_command() command learned to interpret paths in DEPENDS arguments that are specified relative to the current binary directory.
  • The cmake command-line -E remove and -E remove_directory tools are deprecated in favor of the new -E rm tool. The older tools always returned 0 if a named path did not exist even without the force option and cannot be fixed without breaking compatibility, and so have been superseded.
  • Target link properties INTERFACE_LINK_OPTIONS, INTERFACE_LINK_DIRECTORIES and INTERFACE_LINK_DEPENDS are now transitive over private dependencies on static libraries. See policy CMP0099.

Perhaps the issue is Makefile: dependency on BYPRODUCTS not hooked up

Let's try using whatever version of cmake ships with VS 2022. It seems to be a custom MSVC build based on 3.21:

    CMAKE_VERSION=3.21.21080301-MSVC_2

Curiously the number of targets is reported as 967, but it should be about 700.

Some are printing like this:

    [159/967] cmd.exe /c
    [160/967] cmd.exe /c
    [161/967] cmd.exe /c
    [162/967] cmd.exe /c

Let's simplify as much as possible by reducing the number of projects to be built using local.cmake. Firstly let's make sure we can build all the non-Xcpp projects.


    set(BUILD_txUtils ON)
    set(BUILD_txThread ON)
    set(BUILD_txMessage ON)
    set(BUILD_txLss ON)
    set(BUILD_txDgs ON)
    set(BUILD_txOT ON)

Yes this works, and we can run all the ctests as well.

    Test project C:/cedanet/build-ceda-core/windows-x64-debug
        Start 1: txUtils
    1/6 Test #1: txUtils ..........................   Passed   33.62 sec
        Start 2: txOT
    2/6 Test #2: txOT .............................   Passed   19.47 sec
        Start 3: txDgs
    3/6 Test #3: txDgs ............................   Passed    2.03 sec
        Start 4: txThread
    4/6 Test #4: txThread .........................   Passed   17.69 sec
        Start 5: txMessage
    5/6 Test #5: txMessage ........................   Passed   12.03 sec
        Start 6: txLss
    6/6 Test #6: txLss ............................   Passed   10.79 sec
    100% tests passed, 0 tests failed out of 6
    Total Test time (real) =  95.64 sec

Now let's build the minimal example with Xcpp projects : txObject


    set(BUILD_txObject ON)

We get a build error:

>------ Build All started: Project: ceda-core, Configuration: windows-x64-debug ------
  [1/288] Building CXX object Ceda\CMakeFiles\cxUtils.dir\cxUtils\src\BasicTypes.cpp.obj
  [2/288] Building CXX object Ceda\CMakeFiles\cxUtils.dir\cxUtils\src\ConsoleIO.cpp.obj
  [3/288] Building CXX object Ceda\CMakeFiles\cxUtils.dir\cxUtils\src\Crc32.cpp.obj
  [4/288] Building CXX object Ceda\CMakeFiles\cxUtils.dir\cxUtils\src\Crc32_sb.cpp.obj
  [5/288] Building CXX object Ceda\CMakeFiles\cxUtils.dir\cxUtils\src\CedaAssertionException.cpp.obj
  [6/288] Building CXX object Ceda\CMakeFiles\cxUtils.dir\cxUtils\src\ExceptionBase.cpp.obj
  [7/288] Building CXX object Ceda\CMakeFiles\cxUtils.dir\cxUtils\src\Hex.cpp.obj
  [8/288] Building CXX object Ceda\CMakeFiles\cxUtils.dir\cxUtils\src\CedaAssert.cpp.obj
  [9/288] Building CXX object Ceda\CMakeFiles\cxUtils.dir\cxUtils\src\ArchiveError.cpp.obj
  [10/288] Building CXX object Ceda\CMakeFiles\cxUtils.dir\cxUtils\src\MD5.cpp.obj
  [11/288] Building CXX object Ceda\CMakeFiles\cxUtils.dir\cxUtils\src\FilePath.cpp.obj
  [12/288] Building CXX object Ceda\CMakeFiles\cxUtils.dir\cxUtils\src\PcgRandom.cpp.obj
  [13/288] Building CXX object Ceda\CMakeFiles\cxUtils.dir\cxUtils\src\IndentingOutputStreamToOStream.cpp.obj
  [14/288] Building CXX object Ceda\CMakeFiles\cxUtils.dir\cxUtils\src\IndentingStreamBuf.cpp.obj
  [15/288] Building CXX object Ceda\CMakeFiles\cxUtils.dir\cxUtils\src\FileException.cpp.obj
  [16/288] Building CXX object Ceda\CMakeFiles\cxUtils.dir\cxUtils\src\MessageBox.cpp.obj
  [17/288] Building CXX object Ceda\CMakeFiles\cxUtils.dir\cxUtils\src\Environ.cpp.obj
  [18/288] Building CXX object Ceda\CMakeFiles\cxUtils.dir\cxUtils\src\FileStream.cpp.obj
  [19/288] Building CXX object Ceda\CMakeFiles\cxUtils.dir\cxUtils\src\Archive.cpp.obj
  [20/288] Building CXX object Ceda\CMakeFiles\cxUtils.dir\cxUtils\src\MultiSubString.cpp.obj
  [21/288] Building CXX object Ceda\CMakeFiles\cxUtils.dir\cxUtils\src\FileFind.cpp.obj
  [22/288] Building CXX object Ceda\CMakeFiles\cxUtils.dir\cxUtils\src\File.cpp.obj
  [23/288] Building CXX object Ceda\CMakeFiles\cxUtils.dir\cxUtils\src\HPTime.cpp.obj
  [24/288] Building CXX object Ceda\CMakeFiles\cxUtils.dir\cxUtils\src\IsaacRandom.cpp.obj
  [25/288] Building CXX object Ceda\CMakeFiles\cxUtils.dir\cxUtils\src\PagedBufferAsStream.cpp.obj
  [26/288] Building CXX object Ceda\CMakeFiles\cxUtils.dir\cxUtils\src\VariableLengthSerialise.cpp.obj
  [27/288] Building CXX object Ceda\CMakeFiles\cxUtils.dir\cxUtils\src\PagedBuffer.cpp.obj
  [28/288] Building CXX object Ceda\CMakeFiles\cxUtils.dir\cxUtils\src\PseudoRandom.cpp.obj
  [29/288] Building CXX object Ceda\CMakeFiles\cxUtils.dir\cxUtils\src\StringStream.cpp.obj
  [30/288] Building CXX object Ceda\CMakeFiles\cxUtils.dir\cxUtils\src\OutputStreamToOStream.cpp.obj
  [31/288] Building CXX object Ceda\CMakeFiles\cxUtils.dir\cxUtils\src\MsWindows.cpp.obj
  [32/288] Building CXX object Ceda\CMakeFiles\cxUtils.dir\cxUtils\src\MemoryFile.cpp.obj
  [33/288] Building CXX object Ceda\CMakeFiles\cxUtils.dir\cxUtils\src\Stream.cpp.obj
  [34/288] Building CXX object Ceda\CMakeFiles\cxUtils.dir\cxUtils\src\Guid.cpp.obj
  [35/288] Building CXX object Ceda\CMakeFiles\cxUtils.dir\cxUtils\src\SessionValueCache.cpp.obj
  [36/288] Building CXX object Ceda\CMakeFiles\cxUtils.dir\cxUtils\src\UnitPrefix.cpp.obj
  [37/288] Building CXX object Ceda\CMakeFiles\cxUtils.dir\cxUtils\src\UnicodeConv.cpp.obj
  [38/288] Building CXX object Ceda\CMakeFiles\cxMacroExpander.dir\cxMacroExpander\src\cxMacroExpander.cpp.obj
  [39/288] Building CXX object Ceda\CMakeFiles\cxUtils.dir\cxUtils\src\ErrorCode.cpp.obj
  [40/288] Building CXX object Ceda\CMakeFiles\cxUtils.dir\cxUtils\src\SubString.cpp.obj
  [41/288] Building CXX object Ceda\CMakeFiles\cxUtils.dir\cxUtils\src\PagedMemoryFile.cpp.obj
  [42/288] Building CXX object Ceda\CMakeFiles\cxUtils.dir\cxUtils\src\SimpleParser.cpp.obj
  [43/288] Building CXX object Ceda\CMakeFiles\cxUtils.dir\cxUtils\src\cxUtils.cpp.obj
  [44/288] Building CXX object Ceda\CMakeFiles\cxUtils.dir\cxUtils\src\StringExt.cpp.obj
  [45/288] Building CXX object Ceda\CMakeFiles\cxMacroExpander.dir\cxMacroExpander\src\LSSourceFile.cpp.obj
  [46/288] Building CXX object Ceda\CMakeFiles\cxMacroExpander.dir\cxMacroExpander\src\LSLiteral.cpp.obj
  [47/288] Building CXX object Ceda\CMakeFiles\cxMacroExpander.dir\cxMacroExpander\src\ExpressionParser.cpp.obj
  [48/288] Building CXX object Ceda\CMakeFiles\cxMacroExpander.dir\cxMacroExpander\src\ExpandedOutput.cpp.obj
  [49/288] Building CXX object Ceda\CMakeFiles\cxUtils.dir\cxUtils\src\SystemException.cpp.obj
  [50/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Project\CompilerOptions.cpp.obj
  [51/288] Building CXX object Ceda\CMakeFiles\cxUtils.dir\cxUtils\src\TestTimer.cpp.obj
  [52/288] Building CXX object Ceda\CMakeFiles\cxUtils.dir\cxUtils\src\Tracer.cpp.obj
  [53/288] Building CXX object Ceda\CMakeFiles\cxMacroExpander.dir\cxMacroExpander\src\LSToken.cpp.obj
  [54/288] Building CXX object Ceda\CMakeFiles\cxMacroExpander.dir\cxMacroExpander\src\ParserBase.cpp.obj
  [55/288] Building CXX object Ceda\CMakeFiles\cxUtils.dir\cxUtils\src\VectorOfByte.cpp.obj
  [56/288] Building CXX object Ceda\CMakeFiles\cxUtils.dir\cxUtils\src\xstring.cpp.obj
  [57/288] Building CXX object Ceda\CMakeFiles\cxMacroExpander.dir\cxMacroExpander\src\LSVariable.cpp.obj
  [58/288] Building CXX object Ceda\CMakeFiles\cxMacroExpander.dir\cxMacroExpander\src\UsePython.cpp.obj
  [59/288] Building CXX object Ceda\CMakeFiles\cxMacroExpander.dir\cxMacroExpander\src\Mpfw\MpfwSourceFile.cpp.obj
  [60/288] Building CXX object Ceda\CMakeFiles\cxUtils.dir\cxUtils\src\FileTools.cpp.obj
  [61/288] Building CXX object Ceda\CMakeFiles\cxMacroExpander.dir\cxMacroExpander\src\Mpfw\MpfwParser.cpp.obj
  [62/288] Building CXX object Ceda\CMakeFiles\cxUtils.dir\cxUtils\src\xostream2.cpp.obj
  [63/288] Building CXX object Ceda\CMakeFiles\cxUtils.dir\cxUtils\src\BoostToErrorCode.cpp.obj
  [64/288] Building CXX object Ceda\CMakeFiles\cxMacroExpander.dir\cxMacroExpander\src\MacroExpander.cpp.obj
  [65/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Project\GenerateCpj.cpp.obj
  [66/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Project\WriteDsw.cpp.obj
  [67/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Xcpp\BuildProj.cpp.obj
  [68/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Project\Parser\CompilerSwitches.cpp.obj
  [69/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Project\Parser\CompilerSwitchHelper.cpp.obj
  [70/288] Building CXX object Ceda\CMakeFiles\cxUtils.dir\cxUtils\src\xostream.cpp.obj
  [71/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Project\WriteDsp.cpp.obj
  [72/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Project\Parser\WorkspaceParser.cpp.obj
  [73/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Project\Parser\ProjectParser.cpp.obj
  [74/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Xcpp\MapLineNumberToSourceFilePosition.cpp.obj
  [75/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Xcpp\ConfigParser.cpp.obj
  [76/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Project\Parser\ResourceCompilerSwitchParser.cpp.obj
  [77/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Utils.cpp.obj
  [78/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Project\Parser\CompilerSwitchParser.cpp.obj
  [79/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Project\Parser\LinkerSwitchParser.cpp.obj
  [80/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Project\Parser\LibrarianSwitchParser.cpp.obj
  [81/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Project\Project.cpp.obj
  [82/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Project\Parser\ParseStructure.cpp.obj
  [83/288] Building CXX object Ceda\CMakeFiles\cxUtils.dir\cxUtils\src\MulDiv64.cpp.obj
  [84/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Project\WriteVcxProj.cpp.obj
  [85/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Xcpp\Attrib.cpp.obj
  [86/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Project\WriteVcProj.cpp.obj
  [87/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Project\WriteMakeFile.cpp.obj
  [88/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Project\WriteSln.cpp.obj
  [89/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Xcpp\StringTable.cpp.obj
  [90/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Xcpp\Parser\ParseDep.cpp.obj
  [91/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Xcpp\Parser\ParseOpaqueDecl.cpp.obj
  [92/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Xcpp\Parser\ParseClass.cpp.obj
  [93/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Xcpp\Parser\ParseDecl.cpp.obj
  [94/288] Building CXX object Ceda\CMakeFiles\cxThread.dir\cxThread\src\WorkStealingQueue.cpp.obj
  [95/288] Building CXX object Ceda\CMakeFiles\cxThread.dir\cxThread\src\cxThread.cpp.obj
  [96/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Xcpp\Parser\ParseInterface.cpp.obj
  [97/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Xcpp\Parser\ParseEnum.cpp.obj
  [98/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Xcpp\Parser\ParseModel.cpp.obj
  [99/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Xcpp\Parser\XcppParserOutputStream.cpp.obj
  [100/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Xcpp\Parser\ParseVariant.cpp.obj
  [101/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Xcpp\SyntaxTree\FunctionDef.cpp.obj
  [102/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Xcpp\RegisteredSymbols.cpp.obj
  [103/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Xcpp\Parser\XcppParser.cpp.obj
  [104/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Xcpp\SyntaxTree\EnumDef.cpp.obj
  [105/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Xcpp\SyntaxTree\PathInfo.cpp.obj
  [106/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Xcpp\SyntaxTree\FunctorDef.cpp.obj
  [107/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Xcpp\SyntaxTree\Type.cpp.obj
  [108/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\cxBuild.cpp.obj
  [109/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Xcpp\ScannedFileMgr.cpp.obj
  [110/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Xcpp\ScannedFile.cpp.obj
  [111/288] cmd.exe /c
  [112/288] cmd.exe /c
  [113/288] cmd.exe /c
  [114/288] Building CXX object Ceda\CMakeFiles\cxObject.dir\__\ceda-build\xcppsource\windows-x64\Debug\Ceda\cxObject\src\DynamicDispatch.cpp.obj
  FAILED: Ceda/CMakeFiles/cxObject.dir/__/ceda-build/xcppsource/windows-x64/Debug/Ceda/cxObject/src/DynamicDispatch.cpp.obj
  C:\PROGRA~1\MICROS~4\2022\COMMUN~1\VC\Tools\MSVC\1430~1.307\bin\Hostx64\x64\cl.exe  /nologo /TP -DCEDA_CHECK_ASSERTIONS -DHAVE_SNPRINTF -D_CRT_SECURE_NO_WARNINGS -D_HAS_AUTO_PTR_ETC=1 -D_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS -D_WIN32_WINNT=0x0601 -DcxObject_EXPORTS -IC:\cedanet\build-ceda-core\windows-x64-debug\ceda-build\xcppsource\windows-x64\Debug -IC:\cedanet\repos\ceda-core\Ceda\.. -IC:\cedanet\build-ceda-core\windows-x64-debug\ceda-build\xcppsource\windows-x64\Debug\Ceda\cxObject -IC:\cedanet\build-ceda-core\windows-x64-debug\ceda-build\xcppsource\windows-x64\Debug\Ceda\cxObject\src -IC:\cedanet\build-ceda-core\windows-x64-debug\Ceda -IC:\cedanet\repos\ceda-core\Ceda -IC:\cedanet\repos\vcpkg\installed\x64-windows\include /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MDd /Zi /Ob0 /Od /RTC1 /EHsc /wd5033 -std:c++17 /showIncludes /FoCeda\CMakeFiles\cxObject.dir\__\ceda-build\xcppsource\windows-x64\Debug\Ceda\cxObject\src\DynamicDispatch.cpp.obj /FdCeda\CMakeFiles\cxObject.dir\ /FS -c C:\cedanet\build-ceda-core\windows-x64-debug\ceda-build\xcppsource\windows-x64\Debug\Ceda\cxObject\src\DynamicDispatch.cpp
C:\cedanet\repos\ceda-core\c1xx : fatal error C1083: Cannot open source file: 'C:\cedanet\build-ceda-core\windows-x64-debug\ceda-build\xcppsource\windows-x64\Debug\Ceda\cxObject\src\DynamicDispatch.cpp': No such file or directory
  [115/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Xcpp\SyntaxTree\ClassDef.cpp.obj
  [116/288] Building CXX object Ceda\CMakeFiles\cxObject.dir\__\ceda-build\xcppsource\windows-x64\Debug\Ceda\cxObject\src\DGIndep.cpp.obj
  FAILED: Ceda/CMakeFiles/cxObject.dir/__/ceda-build/xcppsource/windows-x64/Debug/Ceda/cxObject/src/DGIndep.cpp.obj
  C:\PROGRA~1\MICROS~4\2022\COMMUN~1\VC\Tools\MSVC\1430~1.307\bin\Hostx64\x64\cl.exe  /nologo /TP -DCEDA_CHECK_ASSERTIONS -DHAVE_SNPRINTF -D_CRT_SECURE_NO_WARNINGS -D_HAS_AUTO_PTR_ETC=1 -D_SILENCE_ALL_CXX17_DEPRECATION_WARNINGS -D_WIN32_WINNT=0x0601 -DcxObject_EXPORTS -IC:\cedanet\build-ceda-core\windows-x64-debug\ceda-build\xcppsource\windows-x64\Debug -IC:\cedanet\repos\ceda-core\Ceda\.. -IC:\cedanet\build-ceda-core\windows-x64-debug\ceda-build\xcppsource\windows-x64\Debug\Ceda\cxObject -IC:\cedanet\build-ceda-core\windows-x64-debug\ceda-build\xcppsource\windows-x64\Debug\Ceda\cxObject\src -IC:\cedanet\build-ceda-core\windows-x64-debug\Ceda -IC:\cedanet\repos\ceda-core\Ceda -IC:\cedanet\repos\vcpkg\installed\x64-windows\include /DWIN32 /D_WINDOWS /W3 /GR /EHsc /MDd /Zi /Ob0 /Od /RTC1 /EHsc /wd5033 -std:c++17 /showIncludes /FoCeda\CMakeFiles\cxObject.dir\__\ceda-build\xcppsource\windows-x64\Debug\Ceda\cxObject\src\DGIndep.cpp.obj /FdCeda\CMakeFiles\cxObject.dir\ /FS -c C:\cedanet\build-ceda-core\windows-x64-debug\ceda-build\xcppsource\windows-x64\Debug\Ceda\cxObject\src\DGIndep.cpp
C:\cedanet\repos\ceda-core\c1xx : fatal error C1083: Cannot open source file: 'C:\cedanet\build-ceda-core\windows-x64-debug\ceda-build\xcppsource\windows-x64\Debug\Ceda\cxObject\src\DGIndep.cpp': No such file or directory
  [117/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Xcpp\SyntaxTree\GlobalFunctionDef.cpp.obj
  [118/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Xcpp\SyntaxTree\InterfaceDef.cpp.obj
  [119/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Xcpp\SyntaxTree\NameSpace.cpp.obj
  [120/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Xcpp\SyntaxTree\TypedefDef.cpp.obj
  [121/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Xcpp\SyntaxTree\GlobalVarDef.cpp.obj
  [122/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Xcpp\SyntaxTree\VarDef.cpp.obj
  [123/288] Building CXX object Ceda\CMakeFiles\Xcpp.dir\Xcpp\src\Xcpp.cpp.obj
  [124/288] Building CXX object Ceda\CMakeFiles\cxThread.dir\cxThread\src\SignaledTask.cpp.obj
  [125/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Xcpp\Xcpp.cpp.obj
  [126/288] Building CXX object Ceda\CMakeFiles\cxThread.dir\cxThread\src\MemoryReclaimer.cpp.obj
  [127/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Xcpp\SyntaxTree\WriteModel.cpp.obj
  [128/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Xcpp\SyntaxTree\WriteDataSource.cpp.obj
  [129/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Xcpp\SyntaxTree\VariantDef.cpp.obj
  [130/288] Building CXX object Ceda\CMakeFiles\cxThread.dir\cxThread\src\TimeOutTask.cpp.obj
  [131/288] Building CXX object Ceda\CMakeFiles\cxThread.dir\cxThread\src\ThreadName.cpp.obj
  [132/288] Building CXX object Ceda\CMakeFiles\cxBuild.dir\cxBuild\src\Xcpp\SyntaxTree\WriteClassReg.cpp.obj
  [133/288] Linking CXX shared library bin\cxUtils.dll
  [134/288] Building CXX object Ceda\CMakeFiles\cxThread.dir\cxThread\src\ThreadPool.cpp.obj
  [135/288] Building CXX object Ceda\CMakeFiles\cxThread.dir\cxThread\src\AsyncSignaledTask.cpp.obj
  [136/288] Building CXX object Ceda\CMakeFiles\cxThread.dir\cxThread\src\IoContextPool.cpp.obj
  [137/288] Building CXX object Ceda\CMakeFiles\cxThread.dir\cxThread\src\AsyncPeriodicTimer.cpp.obj
  [138/288] Building CXX object Ceda\CMakeFiles\cxThread.dir\cxThread\src\AsyncRepeatedTask.cpp.obj
  [139/288] Building CXX object Ceda\CMakeFiles\cxThread.dir\cxThread\src\AsyncTimeOut.cpp.obj
  ninja: build stopped: subcommand failed.

Build All failed.

This has failed to run Xcpp.

Solution

Eventually this bug was solved. It turns out it's caused by the hack to run cedaRunXcppOnWorkspace() at the end of the configure phase. See EndOfConfigurationHook.

For some reason this no longer works in 3.17 onwards.

To avoid this issue we now avoid using the hack and instead explicitly call cedaRunXcppOnWorkspace() at the end of the top level CMakeLists.txt file.