在我的一個項目在工作中,以下被注意到並問我。 二進制文件將鏈接到一個名爲「重新鏈接」文件夾的文件夾中,然後再次鏈接。 我也檢查和二進制是在兩個地方和連接發生兩次。CMake:重新鏈接目錄和雙鏈接
使用CMake的版本是2.6 - 補丁2.
我發現,在build文件夾中,產生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>").....
如果Install是在CMake的使用,COMPONENT不是使用安裝命令創建的,而構建是一個調試版本,則創建此重鏈接文件夾並將二進制鏈接兩次。問題是爲什麼會發生這種情況? 連接兩次會增加您的構建時間。 那麼這有什麼用途。 如果省略了Install命令或者構建版本是Debug版本,則不會發生這種情況。 爲什麼不這樣做,爲什麼它是相關的,如果構建是一個調試版本? 我搜索了文檔和此網站,但找不到解釋。
輸出示例:
.....
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.
這個目錄重新鏈接時顯示以下CMAKELists條目添加
install(TARGETS <binary/library name>
RUNTIME
DESTINATION "bin")
所以建立這個作爲一個調試版本和非組件安裝顯示了這種行爲。 在Jenkins上構建時的相同代碼沒有這個,因爲Jenkins構建版本是Release/Optimized版本,而不是Debug版本。
請創建一個最小的工作示例,顯示您的問題。我從來沒有在你的問題中描述的問題。 – usr1234567
嗨。我更新了文本以提供有關示例輸出的更多詳細信息,刪除了庫名稱。 –