CMake on Cygwin with clang没有创建预期的dll.a.

时间:2016-03-29 20:10:26

标签: dll cmake cygwin shared-libraries clang

我正在使用Cygwin上的lib构建一个共享库和一个应用程序。使用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

1 个答案:

答案 0 :(得分:0)

是的,它似乎是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

与clang一起:

 /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