Ninja: RC compilation ignores add_dependencies()
I have an .exe file with resource section which must contain the DLL file which would be compiled from sources. The Visual Studio generator works fine, but Ninja generator seems to ignore targets order and build the exe file only from second try. The minimal reproduced example project: CMakeLists.txt customtest.c stupidmain.c msi_winetest.rc
The log from msbuild after generating .sln from cmake .. -G "Visual Studio 15 2017"
(assuming that we build it in the "./build" directory):
C:\Users\User\Downloads\Telegram Desktop\msi_winetest\build>cmake --build .
Microsoft (R) Build Engine версии 15.9.21+g9802d43bc3 для .NET Framework
(C) Корпорация Майкрософт (Microsoft Corporation). Все права защищены.
Checking Build System
Building Custom Rule C:/Users/User/Downloads/Telegram Desktop/msi_winetest/CM
akeLists.txt
customtest.c
custom.vcxproj -> C:\Users\User\Downloads\Telegram Desktop\msi_winetest\build
\Debug\custom.dll
Building Custom Rule C:/Users/User/Downloads/Telegram Desktop/msi_winetest/CM
akeLists.txt
stupidmain.c
msi_winetest.vcxproj -> C:\Users\User\Downloads\Telegram Desktop\msi_winetest
\build\Debug\msi_winetest.exe
Building Custom Rule C:/Users/User/Downloads/Telegram Desktop/msi_winetest/CM
akeLists.txt
(Sorry for Russian in msbuild logo)
The Ninja log (if generated by cmake .. -G Ninja
):
C:\Users\User\Downloads\Telegram Desktop\msi_winetest\build_ninja>cmake --build
.
[1/5] Building RC object CMakeFiles\msi_winetest.dir\msi_winetest.rc.res
FAILED: CMakeFiles/msi_winetest.dir/msi_winetest.rc.res
"D:/Progs/CMake/bin/cmcldeps.exe" RC "C:\Users\User\Downloads\Telegram Desktop\m
si_winetest\msi_winetest.rc" CMakeFiles\msi_winetest.dir\msi_winetest.rc.res.d C
MakeFiles\msi_winetest.dir\msi_winetest.rc.res "╧Ёшьхўрэшх: тъы■ўхэшх Їрщыр: "
"C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/VC/Tools/MSVC/
14.16.27023/bin/Hostx86/x86/cl.exe" C:\PROGRA~2\WI3CF2~1\10\bin\100183~1.0\x86\r
c.exe -I"C:\Users\User\Downloads\Telegram Desktop\msi_winetest\build_ninja" -DW
IN32 -D_DEBUG /fo CMakeFiles\msi_winetest.dir\msi_winetest.rc.res "C:\Users\User
\Downloads\Telegram Desktop\msi_winetest\msi_winetest.rc"
Microsoft (R) Windows (R) Resource Compiler Version 10.0.10011.16384
Copyright (C) Microsoft Corporation. All rights reserved.
C:\Users\User\Downloads\Telegram Desktop\msi_winetest\msi_winetest.rc(2) : error
RC2135 : file not found: custom.dll
[2/5] Building C object CMakeFiles\custom.dir\customtest.c.obj
Примечание: включение файла: C:\Program Files (x86)\Windows Kits\10\include\10.
0.18362.0\um\windows.h
<... Skipped many notes about file #includes of windows.h>
ninja: build stopped: subcommand failed.
It's strange that Ninja stubbornly tries to build RC file before target custom
.
The generated Ninja files:
build.ninja
rules.ninja
Edited by Brad King