zoukankan      html  css  js  c++  java
  • Cmake调用NSIS(一个可执行文件,其实就是一个编译器)编译NSIS脚本问题研究

    技术经理说,可以用Cmake当中的add_custom_command,add_custom_target命令来使用。

    我初次研究了下,add_custom_command应该用官方文档中说明的第二种形式:

    The second signature adds a custom command to a target such as a library or executable. This is useful for performing an operation before or after building the target. The command becomes part of the target and will only execute when the target itself is built. If the target is already built, the command will not execute.

      add_custom_command(TARGET target
    PRE_BUILD | PRE_LINK | POST_BUILD
    COMMAND command1 [ARGS] [args1...]
    [COMMAND command2 [ARGS] [args2...] ...]
    [WORKING_DIRECTORY dir]
    [COMMENT comment] [VERBATIM])

    This defines a new command that will be associated with building the specified target. When the command will happen is determined by which of the following is specified:

      PRE_BUILD - run before all other dependencies
    PRE_LINK - run after other dependencies
    POST_BUILD - run after the target has been built

    find_program()find_path()这些命令估计有用。

    NSIS相关:
    NSIS.exe是NSIS带图形界面的编译器,实质上MakeNSISW.exe(一个接口)调用了MakeNSIS.exe来编译你的NSIS脚本文件。所以可以使用MakeNSIS
    命令行方式来编译脚本文件。


    以下是使用MakeNSIS.exe的官方文档:

    3.1 MakeNSIS Usage

    NSIS installers are generated by using the 'MakeNSIS' program to compile a NSIS script (.NSI) into an installer executable. The NSIS development kit installer sets up your computer so that you can compile a .nsi file by simply right-clicking on it in explorer, and selecting 'compile'.

    If you want to use MakeNSIS on the command line, the syntax of the makensis command is:

    makensis [option | script.nsi | - [...]]
    

    3.1.1 Options

    • /LICENSE displays a keen license page.
    • The /V switch followed by a number between 0 and 4 will set the verbosity of output accordingly. 0=no output, 1=errors only, 2=warnings and errors, 3=info, warnings, and errors, 4=all output.
    • The /P switch followed by a number between 0 and 5 will set the priority of the compiler process accordingly. 0=idle, 1=below normal, 2=normal (default), 3=above normal, 4=high, 5=realtime.
    • The /O switch followed by a filename tells the compiler to print its log to that file (instead of the screen)
    • /PAUSE makes makensis pause before quitting, which is useful when executing directly from Windows.
    • /NOCONFIG disables inclusion of nsisconf.nsh. Without this parameter, installer defaults are set from nsisconf.nsh.
    • /CMDHELP prints basic usage information for command (if specified), or all commands (if command is not specified).
    • /HDRINFO prints out information on what options were used to compile makensis was compiled with.
    • /NOCD disables the current directory change to that of the .nsi file
    • Using the /D switch one or more times will add to symbols to the globally defined list (See !define).
    • Using the /X switch one or more times will execute the code you specify following it. Example: "/XAutoCloseWindow false"
    • Specifying a dash (-) for the script name will tell makensis to use the standard input as a source.

    3.1.2 Notes

    • Parameters are processed by order. makensis /Ddef script.nsi is not the same as makensis script.nsi /Ddef.
    • If multiple scripts are specified, they are treated as one concatenated script.
    • On Windows 95, 98 and NT, below normal and above normal process priorities are not available. On those systems, below normal will actually set priority to idle and above normal will set to high.

    3.1.3 Environment variables

    makensis checks a number of environment variables that tell it where to locate the things it needs in order to create installers. These variables include:

    • NSISDIR, NSISCONFDIR - Places where nsis data and config files are installed. NSISDIR alters the script variable ${NSISDIR}. See section 4.2.3 for more info.
    • APPDATA (on Windows) or HOME (on other platforms) - Location of the per-user configuration file.

    3.1.4 Examples

    Basic usage:

    makensis.exe myscript.nsi
    

    Quiet mode:

    makensis.exe /V1 myscript.nsi
    

    Force compressor:

    makensis.exe /X"SetCompressor /FINAL lzma" myscript.nsi
    

    Change script behavior:

    makensis.exe /DUSE_UPX /DVERSION=1.337 /DNO_IMAGES myscript.nsi
    

    Parameters order:

    makensis /XSection sectioncontents.nsi /XSectionEnd
    


    ****************************************************************************** 以下是一个CMakeLists.txt的实例
     1 cmake_minimum_required(VERSION 2.8)
     2 
     3 #set(CMAKE_C_COMPILER "D:VS2008ReleaseVCinamd64")
     4 #set(CMAKE_CXX_COMPILER "D:VS2008ReleaseVCinamd64")
     5 
     6 PROJECT(NSIS) 
     7 
     8 
     9 set( nsis_dir ${CMAKE_CURRENT_SOURCE_DIR}/NSIS)
    10 add_custom_target(Setup ALL MakeNSIS.exe /V1 MyScript.nsi
    11                     COMMENT begin Setup buiding...
    12                     WORKING_DIRECTORY ${nsis_dir})
    结论:
    用add_custom_target()命令来实现此需求。
  • 相关阅读:
    全球疫情实时监控——约翰斯·霍普金斯大学数据大屏实现方案
    少儿编程崛起?2020年4月编程语言排名发布——Java,C,Python分列前三,Scratch挤进前20
    干货来了!阿里发布近300页Flink实战电子书
    Druid 0.17 入门(3)—— 数据接入指南
    Druid 0.17 入门(2)—— 安装与部署
    Flink 1.10 正式发布!——与Blink集成完成,集成Hive,K8S
    Druid入门(1)—— 快速入门实时分析利器-Druid_0.17
    程序员需要了解依赖冲突的原因以及解决方案
    每日一技|活锁,也许你需要了解一下
    Dubbo 服务 IP 注册错误踩坑经历
  • 原文地址:https://www.cnblogs.com/foohack/p/3554552.html
Copyright © 2011-2022 走看看