CMake generates needless "-D" for compile command of RC file
Thank you for developing this useful application.
First my environment is like below.
>cmake --version
cmake version 3.23.2
CMake suite maintained and supported by Kitware (kitware.com/cmake).
>clang --version
clang version 14.0.5
Target: x86_64-pc-windows-msvc
Thread model: posix
InstalledDir: D:\LLVM\bin
(also, generator is Ninja
and rc compiler is llvm-rc
)
Now I've faced the problem that CMake generates an error like below.
[1/8] Building RC object CMakeFiles/quic.dir/src/lib/quic/core/dll.rc.res
FAILED: CMakeFiles/quic.dir/src/lib/quic/core/dll.rc.res
D:\CMake\ver23\bin\cmake.exe -E cmake_llvm_rc D:/MiniTools/Utils/src/lib/quic/core/dll.rc CMakeFiles/quic.dir/src/lib/quic/core/dll.rc.res.pp D:\LLVM\bin\clang.exe -Dquic_EXPORTS -DRC_INVOKED -I D:/MiniTools/Utils/src/include -I D:/OpenSSL/build-x64-debug/include -D -MD -MF CMakeFiles\quic.dir\src\lib\quic\core\dll.rc.res.d -x c -E -- D:/MiniTools/Utils/src/lib/quic/core/dll.rc ++ llvm-rc -Dquic_EXPORTS -I SOURCE_DIR -I D:/MiniTools/Utils/src/include -I D:/OpenSSL/build-x64-debug/include -D -MD -MF CMakeFiles\quic.dir\src\lib\quic\core\dll.rc.res.d /fo CMakeFiles/quic.dir/src/lib/quic/core/dll.rc.res CMakeFiles/quic.dir/src/lib/quic/core/dll.rc.res.pp
clang: warning: argument unused during compilation: '-MF CMakeFiles\quic.dir\src\lib\quic\core\dll.rc.res.d' [-Wunused-command-line-argument]
In file included from <built-in>:342:
<command line>:3:9: error: macro name must be an identifier
#define -MD 1
^
1 error generated.
ninja: build stopped: subcommand failed.
Specifically around the commandline below
-I D:/OpenSSL/build-x64-debug/include -D -MD
Because needless -D
appears, RC compiler (llvm-rc) interpretes -D -MD
as #define -MD
and compile would fail.
CMakeLists.txt is hereCMakeLists.txt and the code which I guess cause the problem may be below.
add_library(quic SHARED)
target_sources(quic
PRIVATE
"src/lib/quic/core/core.cpp"
"src/lib/quic/io/udp_wait.cpp"
"src/lib/quic/io/udp.cpp"
"src/lib/quic/mem/stdalloc.cpp"
"src/lib/quic/mem/stdbpool.cpp"
"src/lib/quic/core/external_func.cpp"
"src/lib/quic/crypto/hkdf.cpp"
"src/lib/quic/crypto/initial.cpp"
"src/lib/quic/crypto/crypto_frames.cpp"
"src/lib/quic/core/capi.cpp"
"src/lib/quic/conn/conn.cpp"
)
if(WIN32)
target_sources(quic PRIVATE "src/lib/quic/core/dll.rc") # cmake works if this line is comment out
endif()
Also CMake generates build.ninja like this. especially around below sections may have problems.
build CMakeFiles/quic.dir/src/lib/quic/core/dll.rc.res: RC_COMPILER__quic_Debug D$:/MiniTools/Utils/src/lib/quic/core/dll.rc || cmake_object_order_depends_target_quic
DEFINES = -Dquic_EXPORTS
DEP_FILE = CMakeFiles\quic.dir\src\lib\quic\core\dll.rc.res.d
FLAGS = -D
INCLUDES = -I D:/MiniTools/Utils/src/include -I D:/OpenSSL/build-x64-debug/include
OBJECT_DIR = CMakeFiles\quic.dir
OBJECT_FILE_DIR = CMakeFiles\quic.dir\src\lib\quic\core
TARGET_COMPILE_PDB = CMakeFiles\quic.dir\
TARGET_PDB = lib\libquic.pdb
FLAGS = -D
may generate -D
.
I tried finding problem reasons but I didn't know that.
Please tell me how to resolve this.