如果你已经安装了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,它应该可以正常工作;但是,如果您安装到其他位置,则需要在调用 cmake 的环境中使用 set PKG_CONFIG_PATH。
此外,如 CMake documentation 中所述,如果您使用的是 CMake 2.8.11 或更早版本,则需要在 get_filename_component() 调用中将 DIRECTORY 替换为 PATH。
更新:关于您后续评论中的文件未找到错误,这几乎可以肯定是因为libwebsocket.so[.7] 不在链接器的默认路径上。至少有三种方法可以解决此问题,但验证问题是否存在的最简单方法是使用以下命令从终端启动应用程序:
$ LD_LIBRARY_PATH=/usr/local/lib ./test-server
如果它有效,您就知道这是问题所在。 (糟糕——我看到你在此期间已经弄清楚了。是的,更新 /etc/ld.so.conf 是另一种方式。或者,你可以强制 CMake 链接到 static 版本的 libwebsockets [as this answer] 中描述的是另一个。但我最喜欢你的解决方案。)
更新:关于/etc/ld.so.conf 没有提及的一件事是,您通常需要在编辑后运行sudo /sbin/ldconfig 以更新共享库缓存。而且——在为特定应用程序设置非默认路径时——许多人认为在/etc/ld.so.conf.d 中添加新的“子配置文件”而不是编辑全局ldconfig 文件是一种很好的形式。 (不过,对于添加 /usr/local/lib 的情况,这是一个非常常见的要求,我倾向于将其转储到全局配置中,无论如何,这是许多 Linux 发行版所做的。)