我有一个简单的可执行文件,它使用库mylib中的函数,该库位于~/mylib/lib/libmylib.so
。
在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
失败而另一个则没有呢?
sdiff -s
命令,结果为空。 - Bersan