Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Statifier与CMake结合使用_Cmake - Fatal编程技术网

将Statifier与CMake结合使用

将Statifier与CMake结合使用,cmake,Cmake,我如何使用 像statifier这样的工具可以使库保持静态?您可以始终创建一个自定义目标来处理您的库或可执行文件,以执行特殊任务 如果要更改cmake中的链接器命令,我知道的最低级别是覆盖cmake\u CXX\u LINK\u EXECUTABLE-变量(对于C,它是cmake\u C\u LINK\u EXECUTABLE)以使用您自己的链接器。如果这样做,请注意该变量中的特殊-字段。有关所有变量,请参阅。下面的部分(扩展规则)显示了可以在cmake的构建变量中使用的特殊“标记”。您始终可以

我如何使用


像statifier这样的工具可以使库保持静态?

您可以始终创建一个
自定义目标来处理您的
可执行文件
,以执行特殊任务


如果要更改cmake中的链接器命令,我知道的最低级别是覆盖
cmake\u CXX\u LINK\u EXECUTABLE
-变量(对于C,它是
cmake\u C\u LINK\u EXECUTABLE
)以使用您自己的链接器。如果这样做,请注意该变量中的特殊
-字段。有关所有变量,请参阅。下面的部分(扩展规则)显示了可以在cmake的构建变量中使用的特殊“标记”。

您始终可以创建一个
自定义目标来处理您的
可执行文件
,以执行特殊任务


如果要更改cmake中的链接器命令,我知道的最低级别是覆盖
cmake\u CXX\u LINK\u EXECUTABLE
-变量(对于C,它是
cmake\u C\u LINK\u EXECUTABLE
)以使用您自己的链接器。如果这样做,请注意该变量中的特殊
-字段。有关所有变量,请参阅。下面的部分(扩展规则)显示了可以在cmake的构建变量中使用的特殊“标记”。

我的main
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

我的main
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