Если вы уже установили 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"
)
По сути, это урезанная версия того, что находится в CMakeLists.txt из проекта libwebsockets github без всех условий, специфичных для платформы и сборки.
Надеюсь, этого достаточно, чтобы удовлетворить ваш запрос на "простой" CMakeLists.txt
пример. Я тестировал его с CMake версии 2.8.12.2; он должен нормально работать как есть, если вы установили libwebsockets с префиксом по умолчанию /usr/local
; однако, если вы установили в другое место, вам нужно будет установить PKG_CONFIG_PATH
в среда, из которой вы вызываете cmake
.
Кроме того, как объясняется в документации по CMake, вам потребуется чтобы заменить DIRECTORY
на PATH
в вызове get_filename_component()
, если вы используете CMake 2.8.11 или более ранней версии.
ОБНОВЛЕНИЕ. Что касается ошибки «файл не найден» из вашего последующего комментария, это почти наверняка связано с тем, что libwebsocket.so[.7]
не указан в пути компоновщика по умолчанию. Есть как минимум три способа исправить это, но самый простой способ убедиться, что это проблема, — просто запустить приложение из терминала, используя:
$ LD_LIBRARY_PATH=/usr/local/lib ./test-server
Если это работает, вы знаете, что это была проблема. (К сожалению, я вижу, вы уже поняли это. Да, обновить /etc/ld.so.conf
— это еще один способ. Или вы можете заставить CMake ссылаться на статическую версию libwebsockets
[как описано в этот ответ]другой. Но мне больше нравится ваше решение.)
ОБНОВЛЕНИЕ. В отношении /etc/ld.so.conf
не упоминается одна вещь: вам обычно нужно запускать sudo /sbin/ldconfig
после его редактирования, чтобы обновить кеш общей библиотеки. И — при установке нестандартных путей для конкретного приложения — многие люди считают хорошим тоном добавить новый «вложенный файл конфигурации» в /etc/ld.so.conf.d
, а не редактировать глобальный файл ldconfig. (Однако в случае добавления /usr/local/lib
это настолько распространенное требование, что я был бы склонен сбросить его в глобальную конфигурацию, что, во всяком случае, делают многие дистрибутивы Linux.)
person
evadeflow
schedule
07.03.2016