我想使用 clangcl 而不是 VS2022 标准工具集构建 zlib。所以我发现我可以使用 cmake 的 -T 选项来实现这一点。它正确选择 clang-cl 但我遇到了一些奇怪的编译问题。
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\Llvm\x64\lib\clang\17\include\stddef.h(18): warning RC4067: unexpected characters following '#if/#elif' directive; newline expected
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\Llvm\x64\lib\clang\17\include\vadefs.h(12): fatal error RC1021: invalid preprocessor command 'include_next'
重现问题:
安装VS 2022和LLVM工具集+msbuild工具集(应该是clang 17)
创建文件夹_build并输入_build
使用以下命令进行配置
cmake -G "Visual Studio 17 2022" -T clangcl -DCMAKE_MSVC_RUNTIME_LIBRARY="MultiThreaded$<$<CONFIG:Debug>:Debug>DLL" -DZLIB_BUILD_EXAMPLES:BOOL=OFF ..
构建 zlib
cmake --build .
您将收到警告和错误。有人知道这里出了什么问题吗? 我尝试了其他项目,使用 -T 选项这些项目工作得非常好。它似乎只出现在 zlib 中。
编辑: 在 Linux 上使用带有 clang 的 cmake、在 Windows 和 Linux 上使用 Android Ndk r26c 以及 Msvc 标准工具集,它可以完美地工作。
我发现了问题:
编译器警告/错误由 zlib1.rc 文件产生。我刚刚从构建中删除了该文件。现在可以了。
基本问题似乎是 zlib 没有单独构建静态或共享库的选项