61

私は C で CMAKE を使用していますが、実際には 2 つの非常に小さな静的ライブラリを作成しています。

私の目標は:

  1. ライブラリはコンパイルされ、*.a ファイルにリンクされます。[これは機能します]
  2. 次に、その *.a ファイルを /usr/local/lib にコピーします [これも機能します]
  3. 私がライブラリについて知っている限り (ほとんど)、それらは-lnameoflibコンパイラ フラグである を使用してリンクされています。わかった。CMakeLists.txt を準備しましたが、実際には *.a ファイルを/usr/local/lib. ただし、それらをプログラムで使用できるようにするには、ヘッダー ファイルを にコピーする必要もあります/usr/local/include。その後、簡単な方法でそれらを含めることができます#include <mylibheader.h>。今ではそう理解しています。

私の質問は、CMAKE を使用してヘッダー ファイルを /usr/include フォルダーにコピーする適切な方法はどのようなものですか? make install*.a ファイルのように、実行時に自動的にコピーしたいと思います。

両方のライブラリについて、似たような CMakeLists.txt があります。

project(programming-network)

add_library(programming-network STATIC
    send_string.c
    recv_line.c
    )

INSTALL(TARGETS programming-network
        DESTINATION "lib"
        )
4

4 に答える 4

81

最新の cmake バージョンのより良い方法は、ターゲットのPUBLIC_HEADERプロパティを使用することです。

project(myproject)

add_library(mylib some.c another.c)
set_target_properties(mylib PROPERTIES PUBLIC_HEADER "some.h;another.h")
INSTALL(TARGETS mylib 
        LIBRARY DESTINATION some/libpath
        PUBLIC_HEADER DESTINATION some/includepath
)

参考文献:

PUBLIC_HEADER

CMake インストール コマンド

于 2016-10-27T12:59:01.200 に答える
6

あなたの解決策が正しいとは思いません。/usr/includeベンダーがファイルを配置するために予約する必要があります。

IMO を行う適切な方法は、ヘッダーをインストールしてから/usr/local/include、ユーザーに指示することexport CPATH="/usr/local/include:${CPATH}"です。

自動的に検索されたよう/usr/local/libですが、別のディレクトリを使用したい場合export LIBRARY_PATH="/usr/local/lib:${LIBRARY_PATH}"は、.a バイナリと同様に機能します (ただし、OS によっては共有ライブラリに対して適切に機能する場合と機能しない場合があります)。

オプションですが、コンパイル中に-I /usr/local/includeandを追加するのは面倒です。-L /usr/local/lib

これはやや主観的な答えですが、私にとってはうまく機能しています。

于 2012-05-07T19:46:11.767 に答える