2013-08-19 22 views
1

以下內容正確地將可執行文件鏈接到原始緩衝區。目標是庫與可執行文件之間的鏈接CMake之間的差異

protobuf_generate_cpp(proto_srcs proto_hdrs simple.proto 
add_executable(executable a.cc "${proto_srcs}") 
target_link_libraries(executable "${PROTOBUF_LIBRARIES}") 

以下不正確地鏈接庫。

protobuf_generate_cpp(proto_srcs proto_hdrs simple.proto 
add_library(proto_lib "${proto_srcs}") 
target_link_libraries(proto_lib "${PROTOBUF_LIBRARIES}") 
... 
target_link_libraries(some_executable proto_lib) 

這個問題似乎是在處理調試vs優化庫。在第一個這是正確處理,而在第二它試圖鏈接到調試/優化庫字符串,錯誤如下。

ld: library not found for -loptimized;/usr/local/lib/libprotobuf.dylib;debug;/usr/local/lib/libprotobuf.dylib 

我試着玩引用的參數和改變正在創建的庫類型,但我很茫然。任何人都知道我在做什麼錯了?

回答

3

移除${PROTOBUF_LIBRARIES}左右的雙引號,它們使CMake處理列表變量爲純字符串。

+0

謝謝,以爲我曾試過。我很好奇,是否有任何理由將字符串視爲一個字符串可用於可執行目標,但與庫目標無關? 我可以冒險猜測,在圖書館它把它視爲一個cmake目標名稱,如果它是一個字符串在可執行文件中,它承認字符串的「特殊」性質,但這是一個非常瘋狂的猜測。 – jrock