2013-08-19 2 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) 

Проблема заключается в обработке отладочных и оптимизированных библиотек. В первом случае это правильно обрабатывается, а во втором - для ссылки на строку debug/optimized library.

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

Я пытался играть с цитируемость аргументов и изменение типа библиотеки создается, но я в недоумении. Кто-нибудь знает, что я делаю неправильно?

ответ

3

Удалите двойные кавычки около ${PROTOBUF_LIBRARIES}, они превращают переменную списка обработок CMake в виде простой строки.

+0

Спасибо, думал, что я это пробовал. Мне любопытно, есть ли какая-либо причина, рассматривающая библиотеки, поскольку строка будет работать с исполняемой мишенью, но не с целевой библиотекой? Я могу догадаться, что в библиотеке он рассматривает это как имя цели cmake, если это строка, где, как и в исполняемом файле, она распознает «особый» характер строки, но это довольно дикое предположение. – jrock

Смежные вопросы