在google-api-cpp-client中构建专门的服务API

时间:2015-10-13 19:27:23

标签: c++ regex cmake google-api-cpp-client

我正在尝试构建专门的Youtube API,它包含在google-api-cpp-client库的标准发行版中。文档说明:

  

如果您下载C ++库并将它们解压缩到此SDK源代码安装根目录的service_apis目录中,则默认构建脚本将自动构建它们。

但是,构建脚本没有。构建分布中包含的样本可以非常清楚地显示出来。

Linking CXX executable ../../bin/calendar_sample
ld: library not found for -lgoogle_calendar_api

CMakeLists.txt的尾部如下所示:

add_subdirectory(src)

if (googleapis_build_samples)
  set(googleapis_build_service_apis true)  # force on
endif()
if (googleapis_build_service_apis)
  add_subdirectory(service_apis)
endif()

# Build samples after the service apis
# but keep them under src
if (googleapis_build_samples)
  add_subdirectory(src/samples)
endif()

最终导致此CMakeLists.txt(在service_apis目录的根目录中):

file(GLOB all_valid_subdirs RELATIVE
          ${CMAKE_CURRENT_SOURCE_DIR} "*/CMakeLists.txt")

foreach(dir ${all_valid_subdirs})
    message(STATUS "path = ${dir}")
    if(${dir} MATCHES "^([^/]*)//CMakeLists.txt")
        string(REGEX REPLACE
               "^([^/]*)//CMakeLists.txt" "\\1" dir_trimmed ${dir})
        add_subdirectory(${dir_trimmed})
    endif()
endforeach(dir)

我在if语句中放了一个message输出。似乎永远无法达到add_subdirectory来电。 foreach会迭代遍历所有子目录。

为什么正则表达式比较失败?

1 个答案:

答案 0 :(得分:2)

我在完成这个问题时确实发现了错误。正则表达式比较包含一个额外的正斜杠。以下正则表达式将成功包含库。

^([^/]*)/CMakeLists.txt

我会向开发者提出一个错误。