14

私は3つのファイルを持っています:

lib.c lib.h => .so ファイルとしてビルドする必要があります
client.c => これは実行可能ファイルとしてビルドする必要があります。
client.c 内に lib.h ファイルをインクルードして、lib.c で定義された関数の宣言を取得します。

ソース領域がCmakeの一時ファイルとバイナリとライブラリ(Windowsの場合は.dlls)で別々のビルドディレクトリとバイナリディレクトリに生成されるように、使用する必要がある正確なCMakeListsファイルを誰かに教えてもらえますか?

4

2 に答える 2

17

このソリューションは.soファイルを作成しませんが、cmake にさらに含めるための同等の cmake を作成します。
これと同等のものを提供するソリューションを探しています:

g++ -shared -Wl,-soname,plugin_lib.so.1 -o plugin_lib.so plugin_lib.o

これはplugin_lib.so、実行時に dlopen で動的にロードできる を生成します。

ソリューションには、次のような「SHARED」オプションがありません。

ADD_LIBRARY(mylib SHARED ${mylibSRCS})
于 2013-09-23T19:18:15.687 に答える
12

Cmake は、デフォルトで個別のビルド ディレクトリにビルドします (この例はテストしていません)。

PROJECT(myproject)
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)

SET(mylibSRCS lib.c)
SET(myprogSRCS client.c)

ADD_LIBRARY(mylib ${mylibSRCS})
ADD_EXECUTABLE(myprog ${myprogSRCS})

TARGET_LINK_LIBRARIES(myprog mylib)

あなたがやる:

mkdir build
cd build
cmake ..
make

すべてが構築中です。

更新: 以下の @chryss で述べられているように、.so ファイルを生成する場合、コマンドは次のようになります。

ADD_LIBRARY(mylib SHARED ${mylibSRCS})
于 2012-07-02T12:45:19.160 に答える