为 libwebsocket 创建 CMake 项目
Creating CMake project for libwebsocket
标题陈述了问题陈述:我正在尝试使用 libwebsocket library 创建一个 CMake 项目,但找不到任何相关信息。
有人试过吗?一个简单的 CMakeLists.txt 例如test-server 程序将不胜感激!
我已经在我的 Ubuntu 14.04 机器上编译并安装了这个库。
编辑:我还想知道是否有人有使用带有 C++ 的 libwebsocket 库的经验?
编辑 2:
使用@evadeflow 的回答后,我可以 运行 cmake 并构建项目。但是现在我收到以下 运行 时间错误:
这里是 /usr/local/lib/
文件夹的 ls
好像没有找到 libwebsockets.so.7
文件?
来自 CMake:
- ${LIB_WEBSOCKETS_INCLUDE_DIRS} = /usr/local/lib
- ${LIB_WEBSOCKETS_INSTALL_DIR} = /usr/local
编辑 3:
通过以下方式解决了编辑 2:
编辑文件 /etc/ld.so.conf
并添加 /usr/local/lib
.
如果您已经安装了 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 文件中内容的精简版本,没有所有特定于平台和构建的条件。
我希望这足以满足您对 'simple' CMakeLists.txt
示例的要求。我用 CMake 版本 2.8.12.2 测试了它;如果您已将 libwebsockets 安装到其默认前缀 /usr/local
,它应该可以正常工作;但是,如果您安装到其他位置,则需要在调用 cmake
.
的环境中 set PKG_CONFIG_PATH
此外,如 CMake documentation 中所述,如果您使用的是 CMake 2.8.11,则需要在 get_filename_component()
调用中将 DIRECTORY
替换为 PATH
或更早。
更新:关于您后续评论中的文件未找到错误,这几乎可以肯定是由于 libwebsocket.so[.7]
不在 link 上er的默认路径。至少有三种方法可以解决这个问题,但验证这是问题所在的最简单方法是使用以下命令从终端启动应用程序:
$ LD_LIBRARY_PATH=/usr/local/lib ./test-server
如果有效,您就知道问题所在。 (哎呀——我看到你已经弄明白了。是的,更新 /etc/ld.so.conf
是另一种方法。或者,你可以强制 CMake 到 link 到 static 版本的 libwebsockets
[如 this answer] 中所述是另一个版本。但我最喜欢你的解决方案。)
更新:关于 /etc/ld.so.conf
没有提到的一件事是您通常需要 运行 sudo /sbin/ldconfig
在编辑它之后为了更新共享库缓存。而且——当为特定的 应用程序 设置非默认路径时——许多人认为在 /etc/ld.so.conf.d
中添加新的 'sub-config file' 而不是编辑全局 ldconfig 是一种很好的形式文件。 (不过,对于添加 /usr/local/lib
的情况,这是一个很常见的要求,我倾向于将其转储到全局配置中,无论如何,许多 Linux 发行版都是这样做的。)
标题陈述了问题陈述:我正在尝试使用 libwebsocket library 创建一个 CMake 项目,但找不到任何相关信息。
有人试过吗?一个简单的 CMakeLists.txt 例如test-server 程序将不胜感激!
我已经在我的 Ubuntu 14.04 机器上编译并安装了这个库。
编辑:我还想知道是否有人有使用带有 C++ 的 libwebsocket 库的经验?
编辑 2: 使用@evadeflow 的回答后,我可以 运行 cmake 并构建项目。但是现在我收到以下 运行 时间错误:
这里是 /usr/local/lib/
文件夹的 ls
好像没有找到 libwebsockets.so.7
文件?
来自 CMake:
- ${LIB_WEBSOCKETS_INCLUDE_DIRS} = /usr/local/lib
- ${LIB_WEBSOCKETS_INSTALL_DIR} = /usr/local
编辑 3:
通过以下方式解决了编辑 2:
编辑文件 /etc/ld.so.conf
并添加 /usr/local/lib
.
如果您已经安装了 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 文件中内容的精简版本,没有所有特定于平台和构建的条件。
我希望这足以满足您对 'simple' CMakeLists.txt
示例的要求。我用 CMake 版本 2.8.12.2 测试了它;如果您已将 libwebsockets 安装到其默认前缀 /usr/local
,它应该可以正常工作;但是,如果您安装到其他位置,则需要在调用 cmake
.
PKG_CONFIG_PATH
此外,如 CMake documentation 中所述,如果您使用的是 CMake 2.8.11,则需要在 get_filename_component()
调用中将 DIRECTORY
替换为 PATH
或更早。
更新:关于您后续评论中的文件未找到错误,这几乎可以肯定是由于 libwebsocket.so[.7]
不在 link 上er的默认路径。至少有三种方法可以解决这个问题,但验证这是问题所在的最简单方法是使用以下命令从终端启动应用程序:
$ LD_LIBRARY_PATH=/usr/local/lib ./test-server
如果有效,您就知道问题所在。 (哎呀——我看到你已经弄明白了。是的,更新 /etc/ld.so.conf
是另一种方法。或者,你可以强制 CMake 到 link 到 static 版本的 libwebsockets
[如 this answer] 中所述是另一个版本。但我最喜欢你的解决方案。)
更新:关于 /etc/ld.so.conf
没有提到的一件事是您通常需要 运行 sudo /sbin/ldconfig
在编辑它之后为了更新共享库缓存。而且——当为特定的 应用程序 设置非默认路径时——许多人认为在 /etc/ld.so.conf.d
中添加新的 'sub-config file' 而不是编辑全局 ldconfig 是一种很好的形式文件。 (不过,对于添加 /usr/local/lib
的情况,这是一个很常见的要求,我倾向于将其转储到全局配置中,无论如何,许多 Linux 发行版都是这样做的。)