我的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.0\VC\INCLUDE;^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\ATLMFC\INCLUDE;^
C:\Program Files (x86)\Windows Kits\8.0\include\shared;^
C:\Program Files (x86)\Windows Kits\8.0\include\um;^
C:\Program Files (x86)\Windows Kits\8.0\include\winrt; set LIB=^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\LIB;^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\ATLMFC\LIB;^
C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x86; set PATH=^
%SystemRoot%\system32;^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin;^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE;^
C:\Program Files (x86)\Windows Kits\8.0\bin\x86; 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.0\VC\INCLUDE;^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\ATLMFC\INCLUDE;^
C:\Program Files (x86)\Windows Kits\8.0\include\shared;^
C:\Program Files (x86)\Windows Kits\8.0\include\um;^
C:\Program Files (x86)\Windows Kits\8.0\include\winrt; set LIB=^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\LIB\amd64;^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\atlmfc\lib\amd64;^
C:\Program Files (x86)\Windows Kits\8.0\lib\win8\um\x64; set PATH=^
%SystemRoot%\system32;^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\amd64;^
C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE;^
C:\Program Files (x86)\Windows Kits\8.0\bin\x64; 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

普通Windows控制台窗口运行nmake编译VC的更多相关文章

  1. java实现打开Windows控制台窗口

    在写Python程序的时候突发奇想了一下,能不能用java代码实现打开控制台窗口呢? 经过查询网络资料和java API文档,终于实现了: package com.primeton.cmd; impo ...

  2. 控制台窗口和powershell运行服务会卡住的解决办法

    之前使用nodejs做了一个简单的web服务,通过控制台窗口运行,通过浏览器访问发现有时候浏览器等很久数据都加载不出来,以为是代码有问题,后来发现是控制台卡住了,按一下enter键就好了,当时百度了一 ...

  3. Windows环境下使用VS2005编译OpenSSL

    如何Windows环境下,使用VS2005编译OpenSSL,虽然这个问题在Baidu.Google上一堆,但安装中还是遇到些问题,在这里 记录下来希望能帮助大家不要在走弯路.注:我是在WinXP S ...

  4. 更改Windows控制台默认缓冲区行数和宽度

    Windows控制台窗口默认的显示行数很少, 以至于有时候要显示很多东西的时候, 总是导致前面的内容丢失. 很不爽. 于是GG了下, 在StackOverflow上找到了答案~~~ 设置方式: 1. ...

  5. 用CMake屏蔽Release运行时的控制台窗口

    在默认情况下,CMake构建的VS工程运行时会弹出控制台窗口,可以通过手动方式进行屏蔽,也可以通过CMake命令进行屏蔽. 手动方式:分为两步 第一步:右击VS项目,选择"属性"- ...

  6. windows cmd窗口提示“telnet”命令不能内部或外部命令,也不是可运行的程序

    windows cmd窗口提示“telnet”命令不能内部或外部命令,也不是可运行的程序 原因:C:\Windows\System32目录下没有telnet.exe,path系统变量的值包含了C:\W ...

  7. windows中控制台窗口和普通窗口有什么区别?

    1. 窗口都是windows标准窗口,有窗口句柄,但是console window没有消息循环,直接从缓冲区读数据,显示数据. windows中普通窗口都有自己的窗口过程, 我可以使用SetWindo ...

  8. VS中运行后控制台窗口一闪就没了

    使用VS2010后,用Ctrl+F5运行程序,结果控制台窗口一闪就没了,也没有出现”press any key to continue…” 或者“请按任意键继续”. 出现这种原因,主要是建立工程时选用 ...

  9. 如何解决Visual Studio 2017 运行后控制台窗口一闪就消失了

    出现这种情况的原因 安装使用Visual Studio 2017 后,用Ctrl+F5运行程序,结果控制台窗口一闪就没了,也没有出现"press any key to continue-&q ...

随机推荐

  1. php操作memcache的用法、详解和方法介绍

    1.简介 memcache模块是一个高效的守护进程,提供用于内存缓存的过程式程序和面向对象的方便的接口,特别是对于设计动态web程序时减少对数据库的访问. memcache也提供用于通信对话(sess ...

  2. javascript进阶——面向对象特性

    面向对象的javascript是这门语言被设计出来时就考虑的问题,熟悉OOP编程的概念后,学习不同的语言都会发现不同语言的实现是不同的,javascript的面向对象特性与其他具有面向对象特性的语言的 ...

  3. Function Pointer in Delpni

    program Project1; {$APPTYPE CONSOLE} {$R *.res} uses System.SysUtils; type TVoice = function(): Stri ...

  4. Mvvm Light Toolkit for WPF/Silverlight系列之搭建mvvmlight开发框架

    Mvvm Light Toolkit for WPF/Silverlight系列之搭建mvvmlight开发框架   本章节,我将通过示例介绍如何搭建mvvmlight开发环境.示例中的我会针对wpf ...

  5. C语言实现的顺序表

    顺序表是用一段地址连续的存储单元依次存储数据元素的线性结构.顺序表可分为静态存储和动态存储,静态顺序表比较简单,数据空间固定,而动态顺序表可以动态增容,便于存放大量数据,现主要把动态的基本实现一下~此 ...

  6. EntityFramework动态组合多排序字段

    前言:在使用EF当中,肯定会遇到动态查询的需求,建立一个公共调用的动态组合表达式查询也是必不可少的,以下是建立动态组合多排序字段做个记录,供以后调用 1.建立一个结构,用于多个排序字段组合,这个结构体 ...

  7. 【python之路6】pycharm的使用

    1.pycharm简介 PyCharm 是我众多python编辑器中比较好的一个.而且可以跨平台,在macos和windows下面都可以用,这点比较好. PyCharm是一种Python IDE,带有 ...

  8. 移动web HTML5使用photoswipe模仿微信朋友圈图片放大浏览

    先来几张效果图: 点击其中一张照片可放大,可支持图片文字描述: 同时支持分享功能: 支持手势放大缩小 使用js框架是PhotoSwipe. PhotoSwipe是一个图片放大插件,兼容pc和移动端,经 ...

  9. DM8168 解码显示模块代码阅读分析

    解码/显示概述:从共享文件夹获取H264流,对264流进行解析,生成hdr文件,hdr文件中包含每一帧的信息,将视频帧信息存放在A8核分配的共享内存空间,供其他核或其他的link调用,M3 Video ...

  10. chrome浏览器默认样式覆盖input背景

    问题描述:input表单添加了背景图片,结果自动填充是,编程了一个淡黄色矩形方框. 解决方案:网上查询了很多的解决方式,基本都不管用,这里我简单说两个. 1.去除黄色背景 input:-webkit- ...