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失败而另一个不会呢?
对于每个可执行文件和库,CMake 创建link.txt执行链接步骤的脚本。
该文件通过以下方式在每个目标build.make脚本中使用
$(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/<target-name>.dir/link.txt
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1776 次 |
| 最近记录: |