cmake-使用自定义编译选项构建目标

时间:2019-11-16 19:14:27

标签: cmake linker glibc libc

我正在尝试针对安装在不同位置(https://github.com/UWQuickstep/quickstep)的新编译的glibc构建一个似乎使用cmake的项目(https://sourceware.org/glibc/wiki/Testing/Builds#Compile_against_glibc_in_an_installed_location)。该项目将quickstep_cli_shell可执行文件作为 only 目标。

我想在项目中添加以下编译选项(其中SYSROOT=<new glibc installation dir>

  -L${SYSROOT}/usr/lib64 \
  -I${SYSROOT}/include \
  --sysroot=${SYSROOT} \
  -Wl,-rpath=${SYSROOT}/lib64 \
  -Wl,--dynamic-linker=${SYSROOT}/lib64/ld-2.18.90.so\
  1. 我在cmake文件(https://github.com/UWQuickstep/quickstep/blob/master/CMakeLists.txt)的顶部添加了以下几行
set(CMAKE_VERBOSE_MAKEFILE on)
set(SYSROOT /fastdisk/glibc-master-install)
add_compile_options("-L${SYSROOT}/usr/lib64" "--sysroot=${SYSROOT}" "-Wl,-rpath=${SYSROOT}/lib64" "-Wl,--dynamic-linker=${SYSROOT}/lib64/ld-2.30.so")
include_directories(BEFORE "${SYSROOT}/include")
  1. 从构建目录运行cmake .. && make时,我看到所有对象文件都是使用适当的编译选项构建的,除了最终的可执行文件。

任何其他目标文件-

/usr/bin/c++ -I/fastdisk/glibc-master-install/include <some other includes> -std=c++14 <some other options> -L/fastdisk/glibc-master-install/usr/lib64 --sysroot=/fastdisk/glibc-master-install -Wl,-rpath=/fastdisk/glibc-master-install/lib64 -Wl,--dynamic-linker=/fastdisk/glibc-master-install/lib64/ld-2.30.so -o CMakeFiles/quickstep_utility_Macros.dir/__/empty_src.cpp.o -c /fastdisk/quickstep/empty_src.cpp

最终的quickstep_cli_shell构建

/usr/bin/c++   -std=c++14 <some other options> -rdynamic CMakeFiles/quickstep_cli_shell.dir/cli/QuickstepCli.cpp.o  -o quickstep_cli_shell <all .a dependencies>
$ quickstep/build# ldd quickstep_cli_shell 
    linux-vdso.so.1 (0x00007ffc5ff6f000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f09b6d50000)
    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f09b69c7000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f09b6629000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f09b6411000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f09b6020000)  ------> should point to libc in $SYSROOT
    /lib64/ld-linux-x86-64.so.2 (0x00007f09c50a1000)

我花了很多时间试图找到一种通过将最终目标可执行文件与新glibc链接来构建最终目标可执行文件的方法,但尚未成功(我使用cmake 3.10.2,如果有帮助的话)。 / p>

我的cmake更改是否有问题?如何正确建立目标?

0 个答案:

没有答案