2017-10-12 33 views
0

共有ライブラリを含む2つのパッケージと、開発で使用するヘッダーを含むもう1つのパッケージを作成します。cmake install PUBLIC_HEADERを使用して別のコンポーネントとしてライブラリと開発ファイルを作成

機能するソリューションは以下のとおりです。

INSTALL(TARGETS mylib 
    COMPONENT core 
    LIBRARY DESTINATION ${LIBDIR} 
) 
INSTALL (
    DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} 
    COMPONENT devel 
    DESTINATION ${INCLUDEDIR} 
    FILES_MATCHING PATTERN "*.h") 

CMakeのも "PUBLIC_HEADER" 宛先を持っているが。あなたが何か行うことができます こうした:

INSTALL(TARGETS mylib 
    LIBRARY DESTINATION ${LIBDIR} 
    PUBLIC_HEADER DESTINATION ${INCLUDEDIR} 
) 

を私はこの仕事を得るように見えることはできません。ヘッダーファイルが明示的にADD_LIBRARY()に追加されていても、$ {INCLUDEDIR}には何もインストールされません。誰かがこれがどのように動作するはずの例を指摘できますか?これで

別の問題私は、理想的に私が欲しい異なるパッケージでライブラリやヘッダをしたいということです。

INSTALL(TARGETS mylib 
    COMPONENT core 
    LIBRARY DESTINATION ${LIBDIR} 
) 
INSTALL(TARGETS mylib 
    COMPONENT devel 
    PUBLIC_HEADER DESTINATION ${INCLUDEDIR} 
) 

しかしPUBLIC_HEADERが設定されているLIBRARY DESTINATIONを必要とするようです。 これを行う方法はありますか? PUBLIC_HEADERのインストールディレクトリに対する利点はありますか?

答えて

0

PUBLIC_HEADERは、あなたの共有ライブラリが実際にOSXフレームワークライブラリでない限り、ここでは間違いなく仕事に間違いありません。ドキュメントでは、これを明確に指摘しています。

あなたはヘッダファイルは、インストール手順の一部としてコピーする場合は、あなたがこのためにinstall(FILES ...) commandを使用する必要があります:cmakeのは、ターゲットを見てから推測する方法がないので、

install(FILES ${MY_PUBLIC_HEADERS} DESTINATION ${INCLUDEDIR} COMPONENT devel) 

をこれは、理にかなっていますどのヘッダーをインストールセットの一部にしたいか、したくないかもしれません。したがって、手動でファイルリストを指定することは、インストールのためのヘッダーを指定する唯一の賢明な方法であり、install(FILES ...)はそれを正確に行います。

ファイルに明示的に与えるよりも時間が節約されるため、壊れたときに導入する頭痛を正当化することは決してできないため、これにもglob式は使用しないでください。

+0

私はドキュメントがそれほど明確ではないとは確信していません。私は(誤って) "Apple以外のプラットフォームでは、これらのヘッダはPUBLIC_HEADERオプションを使ってインストール(TARGETS)コマンドにインストールすることができます。"これが良い方法であることを暗示しています。パブリックヘッダーとプライベートヘッダーを分離するという考えは、何とかアピールします。 –

+0

@ BruceAdams特に、あなたが尋ねたことだけを行う機能を探しているなら、それは簡単に間違いです。 – ComicSansMS

関連する問題