CMake链接和构建目录中的副产品

问题描述:

我是新来的CMake。因此,我有几个问题我不想分解成单独的线程,因为它们相当小并且相关。长话短说,让我们来看看这个链接调用: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 
  1. 为什么CMake的往往添加编译选项链接选项?对于 实例,在这种情况下,SSE选项根本无关紧要。
  2. 为什么 它链接我与一些奇怪的库kernel32, winspool, shell32, ole32, uuid, comdlg32, advapi32?当我使用QMake构建相同的 项目时 - 这些库都没有。此外,我甚至不知道这些的目的。所以,看起来像这些 库是多余的,或者我错了吗?
  3. 我看不到链接的目标文件列表。不过,我注意到 这-Wl,--whole-archive CMakeFiles/go.dir/objects.a -Wl,--no-whole-archive -o go.exe -Wl,--out-implib,libgo.dll.a部分这是我不知道的。但是,我猜所有的对象文件都是 以某种方式归档到objects.a中,因此链接 的这部分本质上与对象文件的显式列表相同,不是吗?
  4. 我想我不担心这一点,但我很好奇的 build文件夹 - 这么多垃圾在那里:

enter image description here

并非意的CMake的行为产生这么多构建过程的副产品?另外我对a.exe完全感到困惑 - 那是什么?为什么它永远驻留在我的build目录中?

+0

难道它也是MinGW/GCC的副产品吗?使用g ++作为链接器的前端是相当常见的,而-Wl选项会传递给实际的链接器...... – 2012-01-30 12:13:09

WRT 4)

的A.EXE文件(或更具体的文件夹中的驻留在)看起来像二进制CMake的用于确定的某些编译的特征的存在。

在任何情况下,您拥有的文件数量对于CMake来说看起来都非常好。如果配置和构建过程中的某些内容失败,它们中的一些对于高级调试非常有用,我认为它是CMake保持它们活跃的良好实践。