• 普通Windows控制台窗口运行nmake编译VC


    我的GDAL编译都是在VS2012提供的prompt windows里面运行nmake完成的。但是如果想将编译自动化,放到Jenkins里面怎么办呢?首先没有VS2012的工程,也不想费力去生成一个,那是绕圈。其实只需要解决一个问题,为什么不能在普通的windows command prompt窗口运行nmake。

    那是因为nmke的路径没有加载环境变量里面,好吧,那就手动加到PATH中。继续,因为最终nmake读取makefile.vc文件,产生的还是cl和link指令. cl需要include目录路径,要加进去,link需要依赖库的路径,要加进去。这就是为什么要在VS2012提供的prompt windows里面运行nmake的原因,因为它都帮你做了。如果是编译64bit的程序,还需要打开专门为64bit提供的VS2012 prompt windows,因为这些路径有些微变化。

    理论说完了,怎么做呢?作为一个指引,推荐看一篇文章:http://bojan-komazec.blogspot.com/2011/10/nmake-and-its-environment.html

    这篇文章很好,耐心的解释了我刚才说的那些为什么不work的原因。然后也提供了作者自己的bat文件,该bat文件运行后,就设置了正确的环境变量。不过他的不支持VS2012,我拿过来后加以修改。下面是我的vc_env.bat文件:

    @rem modifed by Dean Chen to only support Visual Studio 2012 x86/x64 tools, initial version from http://bojan-komazec.blogspot.com/2011/10/nmake-and-its-environment.html 
    @echo off
    
    @if "%1"=="x86" goto set_x86
    @if "%1"=="x64" goto set_x64
    @if "%1"=="" goto error
    
    :set_x86
    @echo Setting environment for using Microsoft Visual Studio 2012 x86 tools.
    
    set INCLUDE=^
    C:Program Files (x86)Microsoft Visual Studio 11.0VCINCLUDE;^
    C:Program Files (x86)Microsoft Visual Studio 11.0VCATLMFCINCLUDE;^
    C:Program Files (x86)Windows Kits8.0includeshared;^
    C:Program Files (x86)Windows Kits8.0includeum;^
    C:Program Files (x86)Windows Kits8.0includewinrt;
    
    set LIB=^
    C:Program Files (x86)Microsoft Visual Studio 11.0VCLIB;^
    C:Program Files (x86)Microsoft Visual Studio 11.0VCATLMFCLIB;^
    C:Program Files (x86)Windows Kits8.0libwin8umx86;
    
    set PATH=^
    %SystemRoot%system32;^
    C:Program Files (x86)Microsoft Visual Studio 11.0VCin;^
    C:Program Files (x86)Microsoft Visual Studio 11.0Common7IDE;^
    C:Program Files (x86)Windows Kits8.0inx86;
    
    goto test_bin_locations
    
    :set_x64
    @echo Setting environment for using Microsoft Visual Studio 2012 x64 tools.
    
    set INCLUDE=^
    C:Program Files (x86)Microsoft Visual Studio 11.0VCINCLUDE;^
    C:Program Files (x86)Microsoft Visual Studio 11.0VCATLMFCINCLUDE;^
    C:Program Files (x86)Windows Kits8.0includeshared;^
    C:Program Files (x86)Windows Kits8.0includeum;^
    C:Program Files (x86)Windows Kits8.0includewinrt;
    
    set LIB=^
    C:Program Files (x86)Microsoft Visual Studio 11.0VCLIBamd64;^
    C:Program Files (x86)Microsoft Visual Studio 11.0VCatlmfclibamd64;^
    C:Program Files (x86)Windows Kits8.0libwin8umx64;
    
    set PATH=^
    %SystemRoot%system32;^
    C:Program Files (x86)Microsoft Visual Studio 11.0VCinamd64;^
    C:Program Files (x86)Microsoft Visual Studio 11.0Common7IDE;^
    C:Program Files (x86)Windows Kits8.0inx64;
    
    goto test_bin_locations
    
    :test_bin_locations
    @echo on
    where nmake
    where cl.exe
    where link.exe
    @echo off
    goto:eof
    
    :error
    @echo Usage: setenv.bat [x86^|x64]
    
    goto:eof


    注意,没有什么是完全不变的。我还是做了些补充,比如原作者的环境变量设置不支持Windows Kits,我加上了。否则GDAL编译会报错,有个程序找不到。

    怎么解决呢,授人以渔才是正解。

    1. 打开VS2012提供的prompt windows, 用env显示所有环境变量

    2. 用everything搜索程序,看路径在哪里,找出来后添加到PATH变量中

    3. 还有VS 2012呢,可以通过一个已有的VS2012工程查找找不到的头文件。 第三点其实一般用不着,但是比较适合离不开IDE的程序员。

    好了,现在如何在Jenkins中编译呢,很简单,用 & 写成一行就行了。在Jenkins build Projecte配置页面里面,最后添加上一个配置

    Execute Windows Batch Command:

    c:\vc_env.bat x86 & cd codes\deps\gdal\gdal_1.8_rtc & nmake -f makefile.vc

    原作者还有一篇介绍如何用namek来创建VC工程的文章,推荐一看:

    http://bojan-komazec.blogspot.com/2011/10/how-to-use-nmake-and-makefile.html

  • 相关阅读:
    Hibernate注解(一对一、一对多、多对多)
    Hibernate多表关系配置——继承
    Hibernate多表关系配置——多对多对关系映射
    Hibernate多表关系配置——一对一关系映射
    Hibernate多表关系配置——多对一关系映射
    初识Hibernate——添加数据
    Servlet学习总结
    jQuery动态添加Table行
    VS2013搭建CSDN源代码管理git
    Node.js amqplib 连接 Rabbitmq 学习笔记
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3270898.html
Copyright © 2020-2023  润新知