2010-09-21 65 views
0

我在CMake中實現一個功能,可以通過make install-TARGET命令安裝單個二進制/目標。這對於自定義目標來說相當簡單。但是,當目標二進制文件與項目的其他庫(BUILD_SHARED_LIBS=ON)動態鏈接時,我需要安裝接受庫。有沒有辦法以某種方式查詢庫的列表?cmake:找出哪些庫是一個二進制目標鏈接

我查看了目標屬性,但沒有找到任何相關的內容。

有關如何獲取庫的列表和/或其他方式來實現上述功能的提示將非常感謝!

[編輯]

例子:
讓我們假設有MyProj有CMake的目標 「MYPROG」 生成二進制myprog項目。我想安裝只有這個二進制與make install-myprog。然而myprog鏈接針對libmy1.so和後面的鏈接針對libmy2.so,這兩個部分都是MyProj的一部分。 我需要一個機制來弄清楚我需要沿着myprog安裝libmy1.solibmy2.so

回答

0

最優雅的解決方案似乎如下。必須使用install command的CMake COMPONENT參數將每個安裝目標分配給組件。例如,在這個問題,這將是這樣的:

install(TARGETS myprog DESTINATION ${BIN_DEST_DIR} COMPONENT myprog), 

,同樣的共享庫

install(TARGETS my1 my2 DESTINATION ${LIB_DEST_DIR} COMPONENT my-libs). 

現在,調用的myprog安裝以及mylib1mylib2一個自定義的目標具有要創建使用cmake_install.cmake找到構建樹:

add_custom_target(install-myprog 
    COMMAND ${CMAKE_COMMAND} -DCOMPONENT=my-libs -P ${CMAKE_BINARY_DIR}/cmake_install.cmake 
    COMMAND ${CMAKE_COMMAND} -DCOMPONENT=myprog -P ${CMAKE_BINARY_DIR}/cmake_install.cmake 
    COMMENT "Installing myprog"). 
0

我不做* nix開發,但是您要查找的功能與Windows的「Dependency Walker」相同。快速搜索提出了以下幾點:

Dependency resolution in Linux

希望它能幫助。

+0

不是真的,我認爲你錯誤理解了這個問題。請參閱上面的修改。 – pszilard 2010-09-21 17:05:38