求适配Folly示例程序的CMakeLists.txt及编译依赖库说明
适配Facebook Folly示例程序的CMake配置方案
问题背景
你编写的Folly示例代码如下:
#include <utility> #include <iostream> #include <folly/Format.h> #include <folly/futures/Future.h> #include <folly/executors/ThreadedExecutor.h> #include <folly/Uri.h> #include <folly/FBString.h> static void print_uri(const folly::fbstring &address) { const folly::Uri uri(address); const auto authority = folly::format("The authority from {} is {}", uri.fbstr(), uri.authority()); std::cout << authority << std::endl; } int main() { folly::ThreadedExecutor executor; folly::Promise<folly::fbstring> promise; folly::Future<folly::fbstring> future = promise.getSemiFuture().via(&executor); folly::Future<folly::Unit> unit = std::move(future).thenValue(print_uri); promise.setValue("https://conan.io/"); std::move(unit).get(); return 0; }你需要对应的CMake配置来处理编译依赖,下面是适配该程序的CMakeLists.txt方案:
示例CMakeLists.txt
cmake_minimum_required(VERSION 3.14) project(folly_example) # 设置C++标准,Folly要求至少C++17 set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) # 查找已安装的Folly库 find_package(Folly REQUIRED) # 添加可执行文件目标 add_executable(folly_example main.cpp) # 链接Folly库及其依赖 target_link_libraries(folly_example PRIVATE Folly::folly )
关键配置说明
- C++标准设置:Folly依赖C++17及以上特性,因此明确指定
CMAKE_CXX_STANDARD 17,并开启CMAKE_CXX_STANDARD_REQUIRED强制编译器使用该标准,避免版本兼容问题。 - find_package(Folly REQUIRED):CMake会自动搜索系统中已安装的Folly库(无论是通过包管理器如apt/brew安装,还是源码编译安装),定位头文件和库文件路径。
- target_link_libraries:链接
Folly::folly这个CMake目标即可,它已经包含了Folly所有的依赖项(比如Boost、OpenSSL、fmt等),无需手动逐个添加。
额外注意事项
如果你的Folly是手动编译安装在非系统标准路径下,需要在运行CMake时通过-DFolly_DIR=/path/to/folly/cmake参数指定Folly的CMake配置文件所在路径,确保CMake能正确找到库。
内容的提问来源于stack exchange,提问作者MTMD
相关产品推荐
相关产品推荐

