CMAKE如何告诉makefile链接一个库?

问题描述 投票:0回答:1

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

关于 CMakeLists.txt我告诉CMAKE在哪里可以找到库并链接它。

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

在这样做之后,我告诉CMAKE在哪里可以找到库并链接它: 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 失败,而不是其他?

c++ linux makefile cmake
1个回答
4
投票

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

这个文件在每个目标的 build.make 脚本通过

$(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/<target-name>.dir/link.txt
© www.soinside.com 2019 - 2024. All rights reserved.