c++ - 如何在 CMake 中以可移植的方式获取 libstdcxx 隐式链接目录

标签 c++ gcc hyperlink cmake libstdc++

背景是我们的项目必须使用不同的 GCC 版本(ABI 可能不兼容)并且我们的构建服务器中安装了多个版本的 GCC。我们使用包装器项目来设置 LD_LIBRARY_PATH,通过 export LD_LIBRARY_PATH=/path/to/gcclib/ 准备环境并在包装器脚本中启动我们的应用程序。

由于使用了不同风格的 gcc/g++,我们想知道是否有一种简单的方法来获取 libstdc++.so 所链接的隐式库路径。例如,其中一个 GCC 工具安装在 /opt/gcc4/gcc4.7/bin/g++ 中,而 libstdc++.so 可以在 /opt/gcc4/gcc4.7 中找到/lib/ 而另一个 GCC 变体可能在 /usr/local/bin/g++/usr/lib/libstdc++.so 中找到。

最佳答案

我想您在设置 CMAKE_{C,CXX}_COMPILER 变量时指定了绝对路径。在这种情况下,您可以使用它来获取库目录:

get_filename_component(GCC_PATH ${CMAKE_C_COMPILER} PATH)
#now ${GCC_PATH} contains "/opt/gcc4/gcc4.7/bin", for example
set(LIBSTD_PATH "${GCC_PATH}/../lib")

对于系统编译器,您可以使用 if 语句:

if(GCC_PATH STREQUAL /usr/local/bin)
set(LIBSTD_PATH "/usr/lib")
endif()

关于c++ - 如何在 CMake 中以可移植的方式获取 libstdcxx 隐式链接目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13290282/

相关文章:

c - gdb 调试器错误 : "-var-create: Unable to create variable object"

c - GCC编译时分错误

C++,在多行代码中注释

javascript - 有没有办法知道链接来自哪里?

html - 图片链接到 Twitter 个人资料

用于初始化指向实例化模板友元函数的指针的 C++ 语法

c++ - 代码 : expected ' ; ' before ' { ' token -- what is causing this? 中的解析错误

c++ - 在 Ubuntu 13.04 上构建 thrift 0.9.1 时出现 libtool 错误

c++ - 向类添加复制构造函数

ruby-on-rails - link_to image_tag 与 Rails 中的内部文本或 html