Использование Statifier с CMake - PullRequest
1 голос
/ 07 декабря 2011

Как я могу использовать

инструмент, подобный http://statifier.sourceforge.net/ statifier, чтобы сделать библиотеку статичной?

Ответы [ 2 ]

1 голос
/ 07 декабря 2011

Вы всегда можете настроить custom_target для работы на library или executable для выполнения специальных задач.

Если вы хотите изменить команду компоновщика в cmake на самый низкий уровень, яизвестно о том, чтобы перезаписать CMAKE_CXX_LINK_EXECUTABLE -вариант (для C это CMAKE_C_LINK_EXECUTABLE), чтобы использовать ваш собственный компоновщик.Если вы сделаете это, обратите внимание на специальные <> -поля этой переменной.Смотрите здесь для всех переменных.В следующем разделе (Правила расширения) показаны специальные «теги», которые можно использовать внутри переменных сборки cmake.

0 голосов
/ 07 декабря 2011

у меня в основном CMakeLists.txt:

#-----------------------------------------------------------------
# statifier determine (http://statifier.sourceforge.net/) for linux
#-----------------------------------------------------------------
set(FOOBAR-HAS-STATIFIER false)

if (UNIX)

  find_program(STATIFIER_EXE NAMES "statifier")

  if (NOT STATIFIER_EXE STREQUAL STATIFIER_EXE-NOTFOUND)

    set(FOOBAR-HAS-STATIFIER true)

    macro(MAKE_STATIC_EXE _static_exe_out)
      foreach (_target ${ARGN})
        set(_shared_exe "${CMAKE_CURRENT_BINARY_DIR}/${_target}")
        set(_static_exe "${CMAKE_CURRENT_BINARY_DIR}/${_target}-static/${_target}")
        add_custom_command(POST_BUILD
          OUTPUT ${_static_exe}
          COMMAND ${STATIFIER_EXE} --set=LD_BIND_NOW=yes ${_shared_exe} ${_static_exe}
          DEPENDS ${_shared_exe}
          )
        SET(${_static_exe_out} ${${_static_exe_out}} ${_static_exe})
      endforeach()
    endmacro()

  else ()

    message ("statifier (http://statifier.sourceforge.net/) not found. Can not build setup for unix")

  endif ()

endif ()

и позже в основном приложении CMakeLists.txt

##
## static foobar
##
if (FOOBAR-HAS-STATIFIER)
  make_static_exe(FOOBAR-STATIC-dynstat dynstat)
  message("${FOOBAR-STATIC-dynstat}")
endif ()

После успешной сборки необходимо иметь в директории сборки foobar и статический foobar-static, выполнимый.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...