我在/ 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的问题,还是我错过了什么?
答案 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没有如此清楚地记录此命令,但它们可能遵循相同的惯例。