【问题标题】:How to compile zlib with clang and cmake如何使用 clang 和 cmake 编译 zlib
【发布时间】:2018-12-27 17:50:46
【问题描述】:

我尝试在 Windows 64 上使用 cmake 和 clang (8.0) 构建 zlib。我执行了以下步骤:

mkdir build.clang
cd build.clang
call "c:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" x64
cmake -E env LDFLAGS="-fuse-ld=lld" cmake -H. -G Ninja ^
  -DCMAKE_C_COMPILER:PATH="C:\Program Files\LLVM\bin\clang-cl.exe" ^
  -DCMAKE_C_COMPILER_ID="Clang" ^
  -DCMAKE_AR="c:\Program Files\LLVM\bin\llvm-ar.exe" ^
  -DCMAKE_SYSTEM_NAME="Generic" ..

配置运行良好(不包括声称无法构建共享库,但这不是目前的问题):

-- The C compiler identification is Clang
-- Check for working C compiler: C:/Program Files/LLVM/bin/clang-cl.exe
-- Check for working C compiler: C:/Program Files/LLVM/bin/clang-cl.exe -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - failed
-- Detecting C compile features
-- Detecting C compile features - done CMake Warning (dev) at CMakeLists.txt:186 (add_library):   ADD_LIBRARY called with SHARED option but the target platform does not   support dynamic linking.  Building a STATIC library instead.  This may lead   to problems. This warning is for project developers.  Use -Wno-dev to suppress it. 
 -- Configuring done
 -- Generating done
 -- Build files have been written to: F:/Project-tests/clang_lept/zlib-1.2.11/build.clang

然而构建失败:

cmake --build . --config Release
[1/36] Building C object CMakeFiles/zlib.dir/crc32.obj
FAILED: CMakeFiles/zlib.dir/crc32.obj
C:\PROGRA~1\LLVM\bin\clang-cl.exe -DNO_FSEEKO -I. -I../  -MD -MT CMakeFiles/zlib.dir/crc32.obj -MF CMakeFiles\zlib.dir\crc32.obj.d -o CMakeFiles/zlib.dir/crc32.obj   -c ../crc32.c
clang-cl: warning: unknown argument ignored in clang-cl: '-MF' [-Wunknown-argument]
clang-cl: error: no such file or directory: 'CMakeFiles/zlib.dir/crc32.obj'
clang-cl: error: no such file or directory: 'CMakeFiles\zlib.dir\crc32.obj.d'
[2/36] Building C object CMakeFiles/zlib.dir/gzread.obj
FAILED: CMakeFiles/zlib.dir/gzread.obj
C:\PROGRA~1\LLVM\bin\clang-cl.exe -DNO_FSEEKO -I. -I../  -MD -MT CMakeFiles/zlib.dir/gzread.obj -MF CMakeFiles\zlib.dir\gzread.obj.d -o CMakeFiles/zlib.dir/gzread.obj   -c ../gzread.c
clang-cl: warning: unknown argument ignored in clang-cl: '-MF' [-Wunknown-argument]
clang-cl: error: no such file or directory: 'CMakeFiles/zlib.dir/gzread.obj'
clang-cl: error: no such file or directory: 'CMakeFiles\zlib.dir\gzread.obj.d'
[3/36] Building C object CMakeFiles/zlib.dir/compress.obj
FAILED: CMakeFiles/zlib.dir/compress.obj
C:\PROGRA~1\LLVM\bin\clang-cl.exe -DNO_FSEEKO -I. -I../  -MD -MT CMakeFiles/zlib.dir/compress.obj -MF CMakeFiles\zlib.dir\compress.obj.d -o CMakeFiles/zlib.dir/compress.obj   -c ../compress.c
clang-cl: warning: unknown argument ignored in clang-cl: '-MF' [-Wunknown-argument]
clang-cl: error: no such file or directory: 'CMakeFiles/zlib.dir/compress.obj'
clang-cl: error: no such file or directory: 'CMakeFiles\zlib.dir\compress.obj.d'
[4/36] Building C object CMakeFiles/zlib.dir/adler32.obj
FAILED: CMakeFiles/zlib.dir/adler32.obj
C:\PROGRA~1\LLVM\bin\clang-cl.exe -DNO_FSEEKO -I. -I../  -MD -MT CMakeFiles/zlib.dir/adler32.obj -MF CMakeFiles\zlib.dir\adler32.obj.d -o CMakeFiles/zlib.dir/adler32.obj   -c ../adler32.c
clang-cl: warning: unknown argument ignored in clang-cl: '-MF' [-Wunknown-argument]
clang-cl: error: no such file or directory: 'CMakeFiles/zlib.dir/adler32.obj'
clang-cl: error: no such file or directory: 'CMakeFiles\zlib.dir\adler32.obj.d'
[5/36] Building C object CMakeFiles/zlib.dir/gzclose.obj
FAILED: CMakeFiles/zlib.dir/gzclose.obj
C:\PROGRA~1\LLVM\bin\clang-cl.exe -DNO_FSEEKO -I. -I../  -MD -MT CMakeFiles/zlib.dir/gzclose.obj -MF CMakeFiles\zlib.dir\gzclose.obj.d -o CMakeFiles/zlib.dir/gzclose.obj   -c ../gzclose.c
clang-cl: warning: unknown argument ignored in clang-cl: '-MF' [-Wunknown-argument]
clang-cl: error: no such file or directory: 'CMakeFiles/zlib.dir/gzclose.obj'
clang-cl: error: no such file or directory: 'CMakeFiles\zlib.dir\gzclose.obj.d'
[6/36] Building C object CMakeFiles/zlib.dir/gzlib.obj
FAILED: CMakeFiles/zlib.dir/gzlib.obj
C:\PROGRA~1\LLVM\bin\clang-cl.exe -DNO_FSEEKO -I. -I../  -MD -MT CMakeFiles/zlib.dir/gzlib.obj -MF CMakeFiles\zlib.dir\gzlib.obj.d -o CMakeFiles/zlib.dir/gzlib.obj   -c ../gzlib.c
clang-cl: warning: unknown argument ignored in clang-cl: '-MF' [-Wunknown-argument]
clang-cl: error: no such file or directory: 'CMakeFiles/zlib.dir/gzlib.obj'
clang-cl: error: no such file or directory: 'CMakeFiles\zlib.dir\gzlib.obj.d'
ninja: build stopped: subcommand failed.

当我尝试使用 clang 的 GCC 兼容性时 - 构建也失败了,但是在链接过程中...

PS:使用 VS 2017 (cmake .. -G "Visual Studio 15 2017 Win64") 构建没有问题...

【问题讨论】:

    标签: windows cmake clang zlib ninja


    【解决方案1】:

    您需要设置更多的环境变量。

    set CC=clang-cl
    set CXX=clang-cl
    set CFLAGS=-m64 -fmsc-version=<your vs version>
    set CXXFLAGS=-m64 -fmsc-version=<your vs version>
    

    或在您的cmake 电话中传递它们。

    【讨论】:

    • 感谢您的提示,但它没有帮助...在我看来,cmake 中存在错误,因为尝试命令时:cl.exe -DNO_FSEEKO -I。 -I../ -MD -MT CMakeFiles/zlib.dir/gzlib.obj -MF CMakeFiles\zlib.dir\gzlib.obj.d -o CMakeFiles/zlib.dir/gzlib.obj -c ../gzlib.c视觉工作室也抱怨它......
    【解决方案2】:

    所以看起来“少即是多”;-)。以下是使用 ninja、clang 和 cmake 构建 zlib 的步骤(必须以管理员身份运行才能安装):

    set CC=clang-cl
    set CFLAGS=-m64 -fmsc-version=1915
    call "c:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" x64
    cmake .. -G Ninja  -DCMAKE_INSTALL_PREFIX="C:\Program Files\zlib"
    cmake --build . --config Release --target install
    cmake --build . --config Debug --target install
    

    我需要指定CMAKE_INSTALL_PREFIX,否则cmake会将64位zlib安装到“C:/Program Files (x86)”

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-05
      • 2012-09-24
      • 2021-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多