Cygwin 上的 CMake 没有创建预期的 clang dll.a
CMake on Cygwin with clang not creating expected dll.a
我正在 Cygwin 上构建共享库和使用该库的应用程序。使用 GCC CMake 创建一个 .dll.a
以在链接时使用。切换到 clang
我得到
[ 34%] Built target xxx_shared
make[2]: *** No rule to make target 'src/libxxx.dll.a', needed by 'xxx.exe'. Stop.
这是 clang CMake 扩展中的错误吗?
我正在使用 cmake --version
3.3.2
是的,这似乎是 CMake 中的一个错误。 运行 make VERBOSE=1
揭示了 GCC:
/usr/bin/c++.exe -g -shared -Wl,--enable-auto-import -o XXX -Wl,-Bstatic -lm -Wl,-Bdynamic -lstdc++ -lcygwin -ladvapi32 -lshell32 -luser32 -lkernel32
同时发出叮当声:
/usr/bin/clang++ -fPIC -g -shared -o XXX -Wl,-Bstatic -lm -Wl,-Bdynamic -lstdc++ -lcygwin -ladvapi32 -lshell32 -luser32 -lkernel32
所以似乎不知何故 clang++ 没有得到 -Wl,--enable-auto-import
标志。手动 运行 更正的 clang++ 命令正确地创建了预期的 .dll.a
允许构建的其余部分按预期进行。
虽然还没有弄清楚为什么会这样。在这一点上我无法破译 CMakes 平台扩展,这似乎是为 GCC 设置的。
更新:我已经报告了这个 here。
我正在 Cygwin 上构建共享库和使用该库的应用程序。使用 GCC CMake 创建一个 .dll.a
以在链接时使用。切换到 clang
我得到
[ 34%] Built target xxx_shared
make[2]: *** No rule to make target 'src/libxxx.dll.a', needed by 'xxx.exe'. Stop.
这是 clang CMake 扩展中的错误吗?
我正在使用 cmake --version
3.3.2
是的,这似乎是 CMake 中的一个错误。 运行 make VERBOSE=1
揭示了 GCC:
/usr/bin/c++.exe -g -shared -Wl,--enable-auto-import -o XXX -Wl,-Bstatic -lm -Wl,-Bdynamic -lstdc++ -lcygwin -ladvapi32 -lshell32 -luser32 -lkernel32
同时发出叮当声:
/usr/bin/clang++ -fPIC -g -shared -o XXX -Wl,-Bstatic -lm -Wl,-Bdynamic -lstdc++ -lcygwin -ladvapi32 -lshell32 -luser32 -lkernel32
所以似乎不知何故 clang++ 没有得到 -Wl,--enable-auto-import
标志。手动 运行 更正的 clang++ 命令正确地创建了预期的 .dll.a
允许构建的其余部分按预期进行。
虽然还没有弄清楚为什么会这样。在这一点上我无法破译 CMakes 平台扩展,这似乎是为 GCC 设置的。
更新:我已经报告了这个 here。