2015-10-13 27 views
2

我正在嘗試構建專門的Youtube API,它包含在google-api-cpp-client庫的標準分發中。該文件指出:在google-api-cpp-client中構建專門的服務API

如果你下載的C++庫,並將其解壓到service_apis目錄在源安裝的根此SDK,則默認構建腳本會自動生成它們。

但是,構建腳本沒有。構建分佈中包含的樣本可以很清楚地揭示這一點。

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

CMakeLists.txt的尾部如下:

​​

最終導致這個的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遍歷所有的子目錄。

爲什麼正則表達式比較失敗?

回答

2

我在完成這個問題時發現了錯誤。正則表達式比較包含一個額外的正斜槓。以下正則表達式將成功包含這些庫。

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

我會提高與開發者的錯誤。

+0

另一位不理解正則表達式的腳本作者。事實是'^([^ /] *)/ CMakeLists.txt'只會匹配'/ CMakeList.txt'之前的一個子目錄。組1還匹配'/ CMakeLists.txt'前面的空字符串,或者一堆空格(包括換行符) – sln

+0

那麼'[\ S /] +/CMakeLists.txt'會更好嗎? – Thijs

+0

那麼,不知道這個'GLOB ___ RELATIVE'是做什麼的,它是否可以包含'sub1/sub2/sub3'/CMakeLists.txt多個子目錄,或者一個。他正在使用錨點'^'和一個單獨的子過濾器'[^ /] +',它不會與多個的匹配。如果你想使用'^(。+)/ CMakeLists.txt'的倍數。如果你只想要一個,使用'^([^ /] +)/ CMakeLists.txt'對於這兩種方法,你可以用'^ \ s *('... – sln