技术经理说,可以用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的实例
 cmake_minimum_required(VERSION 2.8)

 #set(CMAKE_C_COMPILER "D:\VS2008Release\VC\bin\amd64")
#set(CMAKE_CXX_COMPILER "D:\VS2008Release\VC\bin\amd64") PROJECT(NSIS) set( nsis_dir ${CMAKE_CURRENT_SOURCE_DIR}/NSIS)
add_custom_target(Setup ALL MakeNSIS.exe /V1 MyScript.nsi
COMMENT begin Setup buiding...
WORKING_DIRECTORY ${nsis_dir})
结论:
用add_custom_target()命令来实现此需求。

Cmake调用NSIS(一个可执行文件,其实就是一个编译器)编译NSIS脚本问题研究的更多相关文章

  1. java之如何实现调用启动一个可执行文件,exe

    /* * 运行可执行文件:.exe * 当要执行一个本地机器上的可执行文件时, * 可以使用java.lang包中的Runtime类,首先使用Runtime类,首先 * 使用Runtime类声明一个对 ...

  2. 第七周 linux如何装载和启动一个可执行文件

    潘恒 原创作品转载请注明出处 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.实验内容 1.预处理. ...

  3. 对 COM+ 组件进行了方法调用,但该组件有一个已被中止的或正在被中止的事务。 (异常来自 HRESULT:0x8004E003)

    错误: 对 COM+ 组件进行了方法调用,但该组件有一个已被中止的或正在被中止的事务. (异常来自 HRESULT:0x8004E003)   解决办法: 程序连接的数据库换到本地.   具体原因没搞 ...

  4. 调用init方法 两种方式 一个是浏览器方法 一个是 xml中手工配置(load-on-startup)

    调用init方法 两种方式 一个是浏览器方法 一个是 xml中手工配置(load-on-startup)

  5. go语言笔记——go是有虚拟机runtime的,不然谁来做GC呢,总不会让用户自己来new和delete进行内存管理吧,还有反射!Go 的 runtime 嵌入到了每一个可执行文件当中

    2.7 Go 运行时(runtime) 尽管 Go 编译器产生的是本地可执行代码,这些代码仍旧运行在 Go 的 runtime(这部分的代码可以在 runtime 包中找到)当中.这个 runtime ...

  6. JS方式调用本地的可执行文件

    看到一个方法,有些用,先存下来,有用的时候再用. 前几天,在IE,FIREFOX中实现了用JS方式调用本地的可执行文件.地址:www.yihaomen.com/article/js/211.htm , ...

  7. C++程序中调用其他exe可执行文件方法

    在编程过程中有个需求,点击某个按钮需要弹出系统的声音控制面板.在网上查了下代码中调用其他exe程序或者打开其他文件的方法. 自己借鉴网上的文章稍微总结下,加深下印象,也给方便自己用. 在代码中调用其他 ...

  8. ZeroMQ接口函数之 :zmq_recvmsg – 从一个socket上接收一个消息帧

    ZeroMQ 官方地址 :http://api.zeromq.org/4-1:zmq-recvmsg zmq_recvmsg(3)         ØMQ Manual - ØMQ/4.1.0 Nam ...

  9. ZeroMQ接口函数之 :zmq_sendmsg – 从一个socket上发送一个消息帧

    ZeroMQ 官方地址 :http://api.zeromq.org/4-1:zmq-sendmsg zmq_sendmsg(3)        ØMQ Manual - ØMQ/4.1.0 Name ...

随机推荐

  1. bzoj2019 [Usaco2009 Nov]找工作

    Description 奶牛们没钱了,正在找工作.农夫约翰知道后,希望奶牛们四处转转,碰碰运气.而且他还加了一条要求:一头牛在一个城市最多只能赚D(1 <= D <= 1,000)美元,然 ...

  2. android 在EditText中显示表情图片

    public class MainActivity extends Activity { protected void onCreate(Bundle savedInstanceState) { su ...

  3. CF-Approximating a Constant Range

    Description When Xellos was doing a practice course in university, he once had to measure the intens ...

  4. [置顶] Android的IPC访问控制设计与实现

    3.3.1 IPC钩子函数设计与实现 IPC Binder是Android最重要的进程间通信机制,因此,必须在此实施强制访问控制. 1. 修改secuirty.h 打开终端shell,输入指令“cd ...

  5. getChars的使用方法

    <%@ page contentType="text/html; charset=gb2312" %> <%@ page import="java.ut ...

  6. 计算机网络VLAN学习

    首先要搞明白VLAN的由来,为什么会产生这样一种技术.这得从计算机网络的数据交换说起,最开始,我们的网络处于蛮荒时代,数据是怎么交换的,就是简单的介质共享,大家都接到一条线路上,然后互相发数据,这个必 ...

  7. DOM模型结构——节点类型

  8. 第四章 Activity和Activity调用栈分析 系统信息与安全机制 性能优化

    1.Activity生命周期理解生命周期就是两张图:第一张图是回字型的生命周期图第二张图是金字塔型的生命周期图 注意点(1)从stopped状态重新回到前台状态的时候会先调用onRestart方法,然 ...

  9. Java多线程练习三

    public class ex5 { public static void main(String [] args) { thread5 t1 = new thread5(); thread5_1 t ...

  10. ASP.NET MVC上传文件的几种方法

    1.Form表单提交 <p>Form提交</p> <form action="@Url.Action("SavePictureByForm" ...