Заставить CMake использовать статические библиотеки

[Бесстыдно кросс-пост из списка помощи CMake]

Я пытаюсь создавать двоичные файлы как можно более статически. Код Fortran, который у меня есть, содержит X11 и quadmath в качестве зависимостей, и я столкнулся с рядом проблем (может быть, у каждой из этих проблем должен быть свой вопрос?):

Мои переменные в настоящее время

set(CMAKE_LIBRARY_PATH /usr/X11/lib /usr/X11/include/X11 ${CMAKE_LIBRARY_PATH})
find_package(X11 REQUIRED)
find_library(X11 NAMES X11.a PATHS /usr/X11/include/X11/ /usr/X11/lib)
find_library(X11_Xaw_LIB NAMES Xaw Xaw /usr/X11/include/X11/ /usr/X11/lib ${X11_LIB_SEARCH_PATH})
find_library(Xaw Xaw7 PATHS ${X11_LIB_SEARCH_PATH})

set(CMAKE_LIBRARY_PATH /usr/lib/gcc/x86_64-linux-gnu/4.7 /usr/lib/gcc/x86_64-linux-gnu/4.7/x32 /usr/lib/gcc/x86_64-linux-gnu/4.7/32 ${CMAKE_LIBRARY_PATH})

find_library(quadmath NAMES quadmath.a)

set(BUILD_SHARED_LIBS ON)
set(CMAKE_FIND_LIBRARY_SUFFIXES .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
set(LINK_SEARCH_START_STATIC TRUE)
set(LINK_SEARCH_END_STATIC TRUE)

set(SHARED_LIBS OFF)
set(STATIC_LIBS ON)

set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static")

Используя их, CMake пытается собратькаждый программа статически (как и ожидалось) - однако, это не удается, потому что у меня нетXaw.a - Я не могу выяснить, должно ли это существовать на самом деле. Я установил последнюю версиюlibxaw7-dev который я ожидал исправить. Один из вариантов - собрать библиотеки X11 самостоятельно, но я не очень хочу этого делать ...

если я закомментирую толькоset(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static")то CMake все компилирует,но использует общие библиотеки для каждой программы, хотя я указываю расположение.a Библиотеки X11 в моемfind_library() звонки. Я ожидал, что CMake будет использовать файлы .a там, где он мог, а затем использовать только общие библиотеки - есть ли способ заставить это поведение?

Кто-нибудь еще знает об исправлении ошибки, описанной здесь:http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46539; в силу чего gfortran, по-видимому, не может статически связывать libquadmath? Я попытался исправить это с помощью gcc, но я не могу заставить CMake распознать флаг libgfortran:

cmake -DCMAKE_Fortran_COMPILER=gcc -DCMAKE_Fortran_FLAGS=-gfortran

результаты в

-- The Fortran compiler identification is unknown
-- Check for working Fortran compiler: /usr/bin/gcc
-- Check for working Fortran compiler: /usr/bin/gcc  -- broken
CMake Error at /usr/share/cmake-2.8/Modules/CMakeTestFortranCompiler.cmake:54 (message):
The Fortran compiler "/usr/bin/gcc" is not able to compile a simple test program.

тем не мениекак вы могли заметить, я установил местоположение libquadmath.a; когда я создаю программу, которая не использует X11, но использует Quadmath, когда я использую

set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static")

затем программа успешно компилируется (запуск ldd отчетов «не динамический исполняемый файл») - означает ли это, что ошибка была исправлена, или она работает только потому, что я установил местоположение в CMake?

Ответы на вопрос(2)

Ваш ответ на вопрос