CMAKE 如何告诉 makefile 链接库?

Ber*_*san 3 c++ linux makefile cmake

我有一个简单的可执行文件,它使用位于的mylib库中的函数~/mylib/lib/libmylib.so

在 上CMakeLists.txt,我告诉 CMAKE 在哪里可以找到该库并链接它:

find_library(MYLIB_PATH mylib HINT $ENV{HOME}/mylib/lib)
target_link_libraries (output "${MYLIB_PATH}")
Run Code Online (Sandbox Code Playgroud)

执行完后生成Makefile,调用cd build; cmake ..编译成功make


但假设我评论了第二行CMakeLists.txt,如

find_library(MYLIB_PATH mylib HINT $ENV{HOME}/mylib/lib)
# target_link_libraries (output "${MYLIB_PATH}")
Run Code Online (Sandbox Code Playgroud)

并执行相同的操作cd build; cmake ..我得到完全相同的 Makefile,但是由于make这些类型的错误而失败:

In function `Model::Model(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)':
Model.cpp:(.text+0x21): undefined reference to `TF_NewStatus'
Run Code Online (Sandbox Code Playgroud)

由于库未链接而失败是有道理的。但如果两个Makefile相同,为什么一个会make失败而另一个不会呢?

Tsy*_*rev 5

对于每个可执行文件和库,CMake 创建link.txt执行链接步骤的脚本。

该文件通过以下方式在每个目标build.make脚本中使用

$(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/<target-name>.dir/link.txt
Run Code Online (Sandbox Code Playgroud)