【问题标题】:Displaying a target's list of linked libraries in cmake在 cmake 中显示目标的链接库列表
【发布时间】:2020-01-06 17:29:06
【问题描述】:

有没有办法打印通过 target_link_libraries 命令链接到目标的库的文件名列表

或者更好的是,是否将目标的所有依赖项复制到特定文件夹?

【问题讨论】:

    标签: cmake


    【解决方案1】:
    get_target_property(OUT Target LINK_LIBRARIES)
    message(STATUS ${OUT})
    

    【讨论】:

    • 我认为这是一个更好的解决方案。
    【解决方案2】:

    其实不是(*)

    但是,您可以使用 cmake 变量来收集要链接的库的名称(使用 set( ...list(APPEND ... 命令),然后在您的 target_link_libraries 命令中使用此变量:

    target_link_libraries(<targetname> ${YOUR_CMAKE_VARIABLE})
    

    同样的变量也可以用来创建你的复制命令(例如使用this custom target


    (*) 类似的问题被问到here,但没有得到明确的答案。

    【讨论】:

      【解决方案3】:

      我意识到这并不能完全回答关于在 cmake 中执行此操作的问题,但我遇到了类似的问题并认为我应该分享我的解决方案。

      首先,在您的源目录(“项目”)中:

      $ mkdir build && cd build
      $ cmake ..
      

      然后,使用graphviz创建一个点文件,如this answer

      $ cmake --graphviz=graph.dot .
      

      然后,从图中为您的目标去除依赖关系(我们称之为“foo”):

      $ sed -n 's/.*label="\(.*\)"\s.*/\1/p' graph.dot.foo > foo_dependencies.txt
      

      现在,消除混乱:

      $ rm graph.dot*
      

      【讨论】:

        【解决方案4】:

        嗯,所有链接到给定目标 TARGET 的库都在构建中.../CMakeFiles/TARGET.dir/link.txt。

        例如,TARGET=dirac.x,

        .../build_intel17_mkl_i8/.less CMakeFiles/dirac.x.dir/link.txt
        

        会有大量的链接库:

        /cvmfs/it.gsi.de/compiler/intel/17.0/compilers_and_libraries_2017.4.196/linux/bin/intel64/ifort  -Wl,-E  -w -assume byterecl -g -traceback -DVAR_IFORT -i8 -w -assume byterecl -g -traceback -DVAR_IFORT -i8 -O3 -ip CMakeFiles/dirac.x.dir/src/main/main.F90.o  -o dirac.x  -L/tmp/milias-work/software/qch/dirac/devel_trunk/build_intel17_mkl_i8/external/lib  -L/tmp/milias-work/software/qch/dirac/devel_trunk/build_intel17_mkl_i8/external/gen1int-build/external/lib  -L/tmp/milias-work/software/qch/dirac/devel_trunk/build_intel17_mkl_i8/external/pelib-build/external/lib -Wl,-rpath,/tmp/milias-work/software/qch/dirac/devel_trunk/build_intel17_mkl_i8/external/lib:/tmp/milias-work/software/qch/dirac/devel_trunk/build_intel17_mkl_i8/external/gen1int-build/external/lib:/tmp/milias-work/software/qch/dirac/devel_trunk/build_intel17_mkl_i8/external/pelib-build/external/lib: libobjlib.dirac.x.a src/pelib/libpelib_interface.a external/lib/libstieltjes.a -limf -lsvml -lirng -lstdc++ -lm -lipgo -ldecimal -lstdc++ -lgcc -lgcc_s -lirc -lsvml -lc -lgcc -lgcc_s -lirc_s -ldl -lc external/pcmsolver/install/lib/libpcm.a /usr/lib/x86_64-linux-gnu/libz.so -limf -lsvml -lirng -lstdc++ -lm -lipgo -ldecimal -lstdc++ -lgcc -lgcc_s -lirc -lsvml -lc -lgcc -lgcc_s -lirc_s -ldl -lc /usr/lib/x86_64-linux-gnu/libz.so src/libxcfun_fortran_bindings.a external/xcfun-build/src/libxcfun.a external/lib/libpelib.a libgen1int_interface.a external/lib/libgen1int.a -Wl,--start-group /cvmfs/it.gsi.de/compiler/intel/17.0/compilers_and_libraries_2017.4.196/linux/mkl/lib/intel64/libmkl_lapack95_ilp64.a -lmkl_intel_ilp64 -qopenmp -Wl,--end-group -Wl,--start-group -lmkl_intel_ilp64 -lmkl_intel_thread -lmkl_core -lpthread /usr/lib/x86_64-linux-gnu/libm.so -qopenmp -Wl,--end-group external/pcmsolver/install/lib/libpcm.a external/xcfun-build/src/libxcfun.a external/lib/libpelib.a external/lib/libgen1int.a /cvmfs/it.gsi.de/compiler/intel/17.0/compilers_and_libraries_2017.4.196/linux/mkl/lib/intel64/libmkl_lapack95_ilp64.a -lmkl_intel_ilp64 -lmkl_intel_thread -lmkl_core -lpthread /usr/lib/x86_64-linux-gnu/libm.so -lirng -ldecimal -lstdc++
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-07-13
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多