我有一个简单的可执行文件,使用了一个库中的函数。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
失败,而不是其他?
对于每一个CMake创建的可执行文件和库 link.txt
脚本来执行链接步骤。
这个文件在每个目标的 build.make
脚本通过
$(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/<target-name>.dir/link.txt