为什么cmake link_library用" -l"替换绝对路径?对于单个图书馆?

时间:2015-05-18 14:19:34

标签: cmake cross-compiling

我试图将程序从x86_64交叉编译到arm。我在链接时遇到了问题,这是由cmake引起的。

# Toolchain file
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)
set(CMAKE_C_COMPILER arm-linux-gnueabihf-gcc)
set(CMAKE_CXX_COMPILER arm-linux-gnueabihf-g++)
set(CMAKE_ASM_COMPILER arm-linux-gnueabihf-gcc)
set(CMAKE_FIND_ROOT_PATH <path/to/rootfs>)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
set(CMAKE_STAGING_PREFIX <path/to/stage>)
set(CMAKE_LIBRARY_ARCHITECTURE arm-linux-gnueabihf)

# CMakeLists.txt
find_library(LIB_X11 X11)
message("X11: ${LIB_X11}")
target_link_library(<my exe> ${LIB_X11})

CMake将打印出X11和我使用的所有其他库的绝对路径

<path/to/my/rootfs>/usr/lib/arm-linux-gnueabihf/libX11.so

我希望当我链接库以查看link.txt参数时,如下所示:

-l<path/to/my/rootfs>/usr/lib/arm-linux-gnueabihf/libX11.so

然而由于某种原因,X11(并且只有libX11)被替换为&#34; -lX11&#34;在cmake生成的link.txt中。为什么会这样?

1 个答案:

答案 0 :(得分:0)

https://cmake.org/cmake/help/latest/command/target_link_libraries.html#overview

<块引用>

在某些情况下,CMake 可能会要求链接器搜索库(例如,/usr/lib/libfoo.so 变为 -lfoo),例如当检测到共享库没有 SONAME 字段时。请参阅政策 CMP0060 以讨论另一个案例。