【问题标题】:CMake linking and by-products in build directory构建目录中的 CMake 链接和副产品
【发布时间】: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 
  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 文件夹 - 那里有这么多垃圾:

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

【问题讨论】:

  • 会不会也是 MinGW/GCC 的副产品?使用 g++ 作为链接器的前端是相当普遍的, -Wl 选项传递给实际的链接器...

标签: build linker cmake libraries options


【解决方案1】:

写 4)

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

无论如何,对于 CMake,您拥有的文件数量看起来非常好。如果配置和构建过程中的某些内容失败,其中一些对于高级调试非常有用,因此我认为这是 CMake 保持它们活动的一个很好的做法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    • 1970-01-01
    • 2014-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-15
    相关资源
    最近更新 更多