• 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()命令来实现此需求。
  • 相关阅读:
    今天开通cnblogs了,留下点印记
    在windows下编译xvidcore
    linux下c文件里使用中文引发的编译错误及解决
    ThinkPad T400
    据说IBM欲64亿收购Sun
    Visual Studio 的 DllImport 缺陷
    再整MySQL的中文UTF8问题
    Webbased/online OCR services and demos
    用FileSystemWatcher实现山寨版Second Copy [1]
    以前的帖子没了??
  • 原文地址:https://www.cnblogs.com/foohack/p/3554552.html
Copyright © 2020-2023  润新知