【发布时间】:2012-01-29 14:37:02
【问题描述】:
我是 CMake 的新手。因此,我有几个问题不想分成单独的线程,因为它们相当小且相关。长话短说,让我们看看这个链接调用:
/D/Software/MinGW/bin/g++.exe -fmessage-length=0 -mfpmath=sse -msse2 -msse3 -mssse3 -msse4 -fopenmp -g -Wl,--whole-archive CMakeFiles/go.dir/objects.a -Wl,--no-whole-archive -o go.exe -Wl,--out-implib,libgo.dll.a -Wl,--major-image-version,0,--minor-image-version,0 /D/Software/Qt/4.8.0/lib/libQtOpenGLd4.a /D/Software/Qt/4.8.0/lib/libQtGuid4.a /D/Software/Qt/4.8.0/lib/libQtCored4.a -lglu32 -lopengl32 -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32
- 为什么 CMake 倾向于将编译选项添加到链接选项?为了 例如,在这种情况下,SSE 选项根本无关紧要。
- 为什么
它将我与一些奇怪的库链接
kernel32, winspool, shell32, ole32, uuid, comdlg32, advapi32?当我在建造同样的建筑时 使用 QMake 的项目 - 这些库都没有。此外,我 甚至不知道这些的目的。所以,看起来像这些 库是多余的,还是我错了? - 我看不到链接的目标文件列表。然而,我注意到
这个
-Wl,--whole-archive CMakeFiles/go.dir/objects.a -Wl,--no-whole-archive -o go.exe -Wl,--out-implib,libgo.dll.a我不知道的部分。但是,我猜所有的目标文件都是 以某种方式存档到objects.a中,因此这部分链接 本质上与目标文件的显式列表相同,不是吗? - 我想我不必担心,但我很好奇 build 文件夹 - 那里有这么多垃圾:
CMake 的预期行为是否会产生如此多的构建过程副产品?我也对a.exe 完全感到困惑——那是什么?为什么它应该驻留在我的构建目录中?
【问题讨论】:
-
会不会也是 MinGW/GCC 的副产品?使用 g++ 作为链接器的前端是相当普遍的, -Wl 选项传递给实际的链接器...
标签: build linker cmake libraries options