如何以Cmake的可移植方式获取LibstDCXX隐式链接目录

How to get libstdcxx implicit link directory in a portable manner in CMake

本文关键字:LibstDCXX 链接 获取 方式 Cmake 可移植      更新时间:2023-10-16

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

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

我想您在设置CMAKE_{C,CXX}_COMPILER vars时指定一个绝对路径。在这种情况下,您可以使用它来获取DIR:

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