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

时间:2012-11-08 13:50:33

标签: c++ gcc hyperlink cmake libstdc++

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

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

1 个答案:

答案 0 :(得分:1)

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

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()