2011-12-07 6 views

ответ

1

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

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

0

у меня в главном 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 исполнимыми.

Смежные вопросы