Как получить каталог неявных ссылок libstdcxx переносимым способом в CMake
Исходная информация - наш проект должен работать с разными версиями 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++.so.
1 ответ
Я полагаю, вы указываете абсолютный путь при настройке CMAKE_{C,CXX}_COMPILER
вары. В этом случае вы можете использовать его для получения библиотеки 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()