仕事中の私のプロジェクトの1つで、以下のことが気付き、私に尋ねられました。 バイナリは "Relink"フォルダと呼ばれるフォルダにリンクして再度リンクします。 私もチェックし、バイナリは2か所にあり、リンクは2回発生します。使用CMake:ディレクトリを再リンクしてダブルリンク
CMAKEのバージョンは2.6です - パッチ2
私はCMAKEで使用されてインストールする場合は、ビルドフォルダに、生成されたcmake_install.cmakeは、次のエントリ
IF(NOT CMAKE_INSTALL_COMPONENT OR "${CMAKE_INSTALL_COMPONENT}" MATCHES "^(Unspecified)$")
IF("${CMAKE_INSTALL_CONFIG_NAME}" MATCHES "^([Dd][Ee][Bb][Uu][Gg])$")
FILE(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/bin" TYPE EXECUTABLE FILES "/path/to/binary/file/folder/CMakeFiles/CMakeRelink.dir/<binary name>").....
を持っていることがわかった、とCOMPONENT installコマンドで作成されず、ビルドがDebugビルドの場合、このRelink Folderが作成され、バイナリが2回リンクされます。問題はなぜこれが起こるかです。 2回リンクすると、ビルド時間が長くなります。 これはどのような目的を果たしますか。 インストールコマンドを省略するか、ビルドがデバッグビルドの場合、これは発生しません。 ビルドがデバッグビルドであるかどうか、なぜそうではないのですか? ドキュメントとこのサイトを検索しましたが、説明が見つかりませんでした。
出力例:以下CMAKEListsエントリがだから、デバッグビルドやショーに、この動作をインストールする以外のコンポーネントとしてこれを構築
install(TARGETS <binary/library name>
RUNTIME
DESTINATION "bin")
に追加されたときに
.....
Linking CXX shared library lib<library-name>.so <== Linking the first time
[100%] Built target <another library name>
[ 15%] Built target <another-library-name1>
[ 92%] Built target <another-library-name2>
[ 92%] Built target <another-library-name3>
[100%] Built target <another-library-name4>
[100%] Built target <another-library-name5>
Linking CXX shared library CMakeFiles/CMakeRelink.dir/lib<library-name>.so <== Second linking.
この再リンクディレクトリが現れます JenkinsビルドはRelease/Optimizedビルドであり、Debugビルドではないため、Jenkinsでビルドしたときに同じコードにはこれがありません。
問題を示す最小の実例を作成してください。私はあなたの質問に記述された問題を決して持っていなかった。 – usr1234567
こんにちは。私は、ライブラリ名を削除して、サンプル出力の詳細を与えるようにテキストを更新しました。 –