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

时间:2012-01-29 14:37:02

标签: build linker cmake libraries options

我是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. 我想我不必担心,但我很好奇 构建文件夹 - 那里有如此多的垃圾:
  5. enter image description here

    CMake是否打算生成如此多的构建过程副产品?我对a.exe完全感到困惑 - 那是什么?为什么它应该驻留在我的构建目录中?

1 个答案:

答案 0 :(得分:1)

wrt 4)

a.exe文件(或更具体地说是驻留的文件夹)看起来像用于确定某些编译器功能是否存在的二进制文件。

无论如何,你在那里拥有的文件数量看起来非常适合CMake。如果配置和构建过程中的某些内容失败,其中一些对于高级调试非常有用,我认为它是CMake保持活着的良好做法。