当目标是库与可执行文件时,链接之间的差异

时间:2013-08-19 08:29:30

标签: 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 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

我尝试过引用参数并更改正在创建的库的类型,但我很茫然。谁知道我做错了什么?

1 个答案:

答案 0 :(得分:3)

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