2017-11-08 23 views
6

私はサードパーティのCMakeベースのC++プロジェクトを構築しています。-gと-DNDEBUGオプションなしの非常に長いリンク時間

リリースモードでのプロジェクトのビルドには数秒しかかかりません。リンクステージは1秒未満で完了します(makeの場合Linking CXX executable myproject.exe)。

デバッグモードでのビルドには1分以上かかります。この時間のほとんどは、実行可能ファイルのリンクに費やされます。これは、コードの変更を最小限にした後のビルドでも発生します。

リリースモードとの違いは、-gのオプションと-O3 -DNDEBUGのオプションのようです。この動作は期待されていますか?私は以前(〜18k LOC)のような規模のプロジェクトに取り組んできましたが、デバッグモードとリリースモードのコンパイル時に大きな違いはありませんでした。特にデバッグモードでは、大規模なプロジェクトのための

C:\msys64\mingw64\bin\g++.exe -std=c++0x -Wall -Wextra -Wpointer-arith \ 
-Wcast-align -fstrict-aliasing -Wno-unused-local-typedefs -fvisibility- \ 
inlines-hidden -march=native -g -Wl,--whole-archive \ 
CMakeFiles\myproject.dir/objects.a -Wl,--no-whole-archive \ 
-o myproject.exe -Wl,--major-image-version,0,--minor-image-version,0 \ 
@CMakeFiles\myproject.dir\linklibs.rsp 
+0

ある役立つものデバッグ情報は非常に大きくなる可能性があります。また、 '-NDEBUG'オプションは実際には' -DNDEBUG'で、マクロを定義する '-D'プリプロセッサオプションです。 –

+0

@Someprogrammerdudeあなたが正しいです、私は自分の投稿を更新しました。私はそれがきれいなビルドか再構築かどうかに関係なく、プロジェクトがコンパイルするのに1分以上かかりますが、それは変わっています。 – Jawap

+3

@Jawap 'NDEBUG'を省略すると、いくつかの一般的なヘッダにcode_の_lotsが有効になる可能性はありますか? – yugr

答えて

3

残念ながら、リンク時間がかなり遅くなることができます。

は、これは50秒かかります。通常、代わりにデフォルトBFDリンカーのゴールドリンカーを使用して、共有ライブラリ(それはLLVMの開発者などによって行われています)

  • SSD(またはtmpfsの)上のリンク
    • 分割プロジェクト
  • +1

    おそらく最も速いリンカであり、かなり成熟しているはずのLLVMリンカ:https://lld.llvm.org – valiano

    +0

    @valianoありがとう、私はそれが全く新しい(それは世界をリンクすることができるように金を数年かかったので)それを言及しなかった。 – yugr

    関連する問題