c++folly

Cmake file for a Folly project


I am trying to write a toy example to use Facebook's Folly library. The program is brought in what follows:

#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;
}

The problem is that I am not sure what are the required libraries for compiling such a program. I would be very grateful if someone can share the CMakeList.txt file for a Folly project.


Solution

  • Here is the required CMakeLists.txt for making a Folly project.

    cmake_minimum_required(VERSION 3.7)
    find_package(Boost REQUIRED)
    find_package(folly REQUIRED)
    find_package(Threads REQUIRED)
    find_package(gflags REQUIRED)
    
    set(CMAKE_CXX_STANDARD 14)
    #include_directories(${Boost_INCLUDE_DIRS})
    #include_directories(${folly_INCLUDE_DIRS})
    
    set_and_check(FOLLY_INCLUDE_DIR /usr/local/include/folly)
    set_and_check(FOLLY_CMAKE_DIR /usr/local/lib/cmake/folly)
    if (NOT TARGET Folly::folly)
      include("${FOLLY_CMAKE_DIR}/folly-targets.cmake")
    endif()
    
    
    set(FOLLY_LIBRARIES Folly::folly)
    
    if (NOT folly_FIND_QUIETLY)
      message(STATUS "Found folly: ${PACKAGE_PREFIX_DIR}")
    endif()
    
    add_executable(HelloWorld main.cpp)
    target_link_libraries(HelloWorld ${Boost_LIBRARIES} ${FOLLY_LIBRARIES})