CMake的link_directories问题与静态库(在Mac OS X上)

时间:2015-11-30 06:46:22

标签: macos cmake

我在/ PATH目录中有一个静态库,当我尝试使用link_directories库时,如下所示:

link_directories(/PATH)
target_link_libraries(CppHello libHelloLib.a)

我收到了错误消息:

ld: library not found for -lHelloLib
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[3]: *** [/PATH] Error 1
make[2]: *** [CMakeFiles/CppHello.dir/all] Error 2
make[1]: *** [CMakeFiles/CppHello.dir/rule] Error 2

相反,我必须按如下方式指定路径才能使其正常工作:

target_link_libraries(CppHello /PATH/libHelloLib.a)

可能有什么问题?这是Mac OS X上Cmake的问题,还是我错过了什么?

1 个答案:

答案 0 :(得分:3)

在创建可执行文件后调用link_directories() link_directories仅影响在其后创建的目标:https://cmake.org/cmake/help/v3.4/command/link_directories.html。结果是正确的-lHelloLib标志被添加到目标,但是lib搜索路径没有使用-L/PATH标志更新。

而是在创建任何目标之前将调用发送到link_directories()

由于3.3版本target_link_libraries的CMake文档明确指定了它接受的链接类型。其中:

  • 库文件的完整路径
  • 普通图书馆名称

因此,您应指定库文件的完整路径,或仅限库名称,而不指定文件的扩展名(.a)和前缀( lib)。在你的案例中显示错误消息,CMake试图处理甚至仅文件名的库,但没有成功(某种未定义的行为)。

虽然之前版本的CMake没有如此清楚地记录此命令,但它们可能遵循相同的惯例。