2017-11-15 15 views
2

私は本当にcmakeの新機能ですが、cmakeが静的ライブラリにリンクする前に作成したオブジェクトファイルを変更する方法があるかどうかを確認しようとしています。私のcmakeのファイルは今、この権利のようになります。cmakeは静的ライブラリをリンクする前にオブジェクトファイルを変更しました

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g")  
set(SOURCES 
    file1.cpp 
    file2.cpp 
) 
add_library(my_proj STATIC ${SOURCES}) 
add_custom_command(
    TARGET my_proj 
    PRE_LINK 
    COMMAND <run objcopy on some of the object files here> 
    COMMENT " Running PRE_LINK action " 
) 

は今、私はいくつかの中からデバッグシンボルを、それらのいくつかをループして取り除くことができるように、オブジェクト・ファイル名を取得するためにcmakeのに良い方法を見ていないです他のオブジェクトのデバッグシンボルを残します。これにより、必要なオブジェクトだけのシンボルが追加された、より小さな静的ライブラリを作成することができます。私にすべてのオブジェクトファイル名を与えることができるcmake変数があるので、objcopyを選択的に呼び出してオブジェクトファイルのデバッグシンボルを取り除くことができますか?

答えて

0

あなたができることは、ターゲットのオブジェクトファイルの一部だけではなく、ターゲット全体で実行するコマンドを指定することです。

add_library(my_proj STATIC ${SOURCES}) 
add_custom_command(TARGET my_proj POST_BUILD 
    COMMAND objcopy -S $<TARGET_FILE:my_proj> 
    COMMENT "Stripping my_proj" 
) 

それが構築された後my_proj.aにobjcopyを実行します:たとえば、手動で行うことができ、静的ライブラリをストリップに。オブジェクトファイルをより細かく処理する必要がある場合は、ライブラリをいくつかのより小さな静的ライブラリに分割して、それぞれに応じて操作することをお勧めします。

関連する問題