CMake在目标为库时链接与可执行时链接之间的差异

CMake在目标为库时链接与可执行时链接之间的差异,cmake,Cmake,以下内容将可执行文件正确链接到protobuffer 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 simp

以下内容将可执行文件正确链接到protobuffer

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)
问题似乎在于调试库与优化库的处理。在第一种情况下,这是正确处理的,而在第二种情况下,它尝试链接到调试/优化库字符串,错误如下

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

我尝试过引用参数和更改正在创建的库的类型,但我不知所措。有人知道我做错了什么吗?

删除
${PROTOBUF_LIBRARIES}
周围的双引号,它们使CMake将列表变量视为普通字符串。

谢谢,我想我已经尝试过了。我很好奇,是否有任何理由将库视为一个字符串来处理可执行目标而不是库目标?我可以大胆猜测,在库中,如果它是一个字符串,它会将其视为cmake目标名称,而在可执行文件中,它会识别该字符串的“特殊”性质,但这是一个相当疯狂的猜测。