を既にインストールしている場合はlibwebsockets
、次のように動作するはずです。
cmake_minimum_required(VERSION 2.8)
find_package(PkgConfig)
pkg_check_modules(LIB_WEBSOCKETS REQUIRED libwebsockets)
get_filename_component(
LIB_WEBSOCKETS_INSTALL_DIR
${LIB_WEBSOCKETS_LIBRARY_DIRS}
DIRECTORY
)
add_executable(
test-server
test-server/test-server.c
test-server/test-server-http.c
test-server/test-server-dumb-increment.c
test-server/test-server-mirror.c
test-server/test-server-status.c
test-server/test-server-echogen.c
)
target_link_libraries(
test-server
${LIB_WEBSOCKETS_LIBRARIES}
)
set_target_properties(
test-server
PROPERTIES
INCLUDE_DIRECTORIES
${LIB_WEBSOCKETS_INCLUDE_DIRS}
LINK_FLAGS
"-L${LIB_WEBSOCKETS_LIBRARY_DIRS}"
COMPILE_DEFINITIONS
INSTALL_DATADIR="${LIB_WEBSOCKETS_INSTALL_DIR}/share"
)
これは基本的に、libwebsockets github プロジェクトのCMakeLists.txtファイルの内容を簡素化したもので、プラットフォーム固有およびビルド固有の条件がすべて含まれていません。
「単純な」CMakeLists.txt
例に対するあなたの要求を満たすのにこれで十分であることを願っています。CMake バージョン 2.8.12.2 でテストしました。libwebsockets をデフォルトのプレフィックス/usr/local
;にインストールした場合は、そのままで問題なく動作するはずです。ただし、別の場所にインストールした場合は、を呼び出した環境で設定PKG_CONFIG_PATH
cmake
する必要があります。
また、CMake のドキュメントで説明されているように、 CMake 2.8.11 以前を使用している場合は、呼び出しDIRECTORY
でを置き換える必要があります。PATH
get_filename_component()
更新: フォローアップ コメントからのファイルが見つからないというエラーに関しては、これはほぼ確実libwebsocket.so[.7]
に、リンカーの既定のパスにないことが原因です。これを修正するには少なくとも 3 つの方法がありますが、これが問題であることを確認する最も簡単な方法は、以下を使用して端末からアプリを起動することです。
$ LD_LIBRARY_PATH=/usr/local/lib ./test-server
それが機能する場合、それが問題であることがわかります。(おっと—それまでに理解したようです。ええ、更新は別の方法です。または、[この回答で説明されているように] の静的バージョン/etc/ld.so.conf
にリンクするように CMake を強制することもできます。しかし、私はあなたの解決策が好きです一番。)libwebsockets
UPDATE : 言及されていないことの 1 つ/etc/ld.so.conf
は、通常sudo /sbin/ldconfig
、共有ライブラリ キャッシュを更新するために編集後に実行する必要があることです。また、特定のアプリケーションにデフォルト以外のパスを設定する場合、多くの人/etc/ld.so.conf.d
は、グローバルな ldconfig ファイルを編集するよりも、新しい「サブ構成ファイル」を追加する方がよいと考えています。(ただし、追加の場合/usr/local/lib
、これは非常に一般的な要件であるため、グローバル構成にダンプする傾向があります。これは、とにかく多くのLinuxディストリビューションが行うことです。)