CMAKE如何告诉makefile链接库



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

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

find_library(MYLIB_PATH mylib HINT $ENV{HOME}/mylib/lib)
target_link_libraries (output "${MYLIB_PATH}")

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


但假设我将CMakeLists.txt上的第二行注释为

find_library(MYLIB_PATH mylib HINT $ENV{HOME}/mylib/lib)
# target_link_libraries (output "${MYLIB_PATH}")

并执行相同的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'

它失败是有道理的,因为库没有链接。但是,如果两个Makefile都相同,为什么一个make会失败,而另一个不会?

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

该文件通过用于每个目标build.make脚本

$(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/<target-name>.dir/link.txt

最新更新