Visual Studio 2008 和 Windows 环境变量对设置 相对路径很重要,这样便于代码的移植,即使换一台计算机,代码不用更改配置,直接就能用。 可以在项目的“工具”“属性页”对话框中任何接受字符串的位置使用这些宏。这些宏不区分大小写。
关于如何自己定义环境变量详见我的另一文章:http://blog.iyunv.com/jtop0/article/details/7574139
安装 Visual Studio 2010 的目录。
此属性包含目标 Visual Studio 的版本,该版本可能与宿主 Visual Studio 不同。例如,在使用 $(PlatformToolset) = v90 进行生成时,$(VSInstallDir) 包含 Visual Studio 2008 安装位置的路径。
$(VCInstallDir)
安装 Visual C++ 2010 的目录。
此属性包含目标 Visual C++ 的版本,该版本可能与宿主 Visual Studio 不同。例如,在使用 $(PlatformToolset) = v90 进行生成时,$(VCInstallDir) 包含 Visual C++ 2008 安装位置的路径。
$(FrameworkDir)
安装 .NET Framework 的目录。
$(FrameworkVersion)
Visual Studio 使用的 .NET Framework 版本。与 $(FrameworkDir) 相结合,就是 Visual Studio 使用的 .NET Framework 版本的完整路径。
$(FrameworkSDKDir)
安装 .NET Framework 的目录。.NET Framework 可能已作为 Visual Studio 2010 的一部分安装,也可能单独安装。
$(WebDeployPath)
从 Web 部署根到项目输出所属于的位置的相对路径。返回与 RelativePath 相同的值。
$(WebDeployRoot)
指向 位置的绝对路径。例如,c:/inetpub/wwwroot。
$(FxCopDir)
fxcop.cmd 文件的路径。fxcop.cmd 文件不和所有的 Visual C++ 版本一起安装。
出处:http://msdn.microsoft.com/zh-cn/library/c02as0cs.aspx
Visual Studio 2010
>>Visual Studio
>>Visual Studio 语言
>>Visual C++
>>Building a C/C++ Program
>>在 Visual Studio 中生成 C++ 项目
>>用于生成命令和属性的宏
Visual Studio 2008 产生的临时文件
http://www.iyunv.com/owen-zhang/archive/2010/01/07/VisualStudioTemporaryFilesFolder.html
Visual Studio临时文件存放的文件夹
在使用Visual Studio开发工具的过程中,Visual Studio会在如下文件夹(以VS2008和.NET Framework 2.0为例)中生成一些临时性的文件:
1、ReflectedSchemas:完整路径为“C:\Documents and Settings\Administrator\Application Data\Microsoft\VisualStudio\9.0\ReflectedSchemas”。
2、ReflectedTypeLibs:完整路径为“C:\Documents and Settings\Administrator\Application Data\Microsoft\VisualStudio\9.0\ReflectedTypeLibs”。
3、Temporary ASP.NET Files:完整路径为“C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files“。
我的系统不是C盘,用户名也不是Administrator,有批处理命令中用环境变量:
1、%USERPROFILE%\Application Data\Microsoft\VisualStudio\9.0\ReflectedSchemas
2、%USERPROFILE%\Application Data\Microsoft\VisualStudio\9.0\ReflectedTypeLibs
3、%SystemRoot%\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files
设置一个环境变量可以通过调用‘putenv()’函数完成。
#include
int putenv(char *string);
变量string应该遵守"name=value"的格式。已经传递给putenv函数的字符串*不*能够被释放或变成无效,因为一个指向它的指针将由‘putenv()’保存。这意味着它必须是在静态数据区中或是从堆(heap)分配的。如果这个环境变量被另一个‘putenv()’的调用重新定义或删除,上述字符串可以被释放。
/**************************译者增加***********************************
因为putenv()有这样的局限,在使用中经常会导致一些错误,GNU libc 中还包括了两个BSD风格的函数:
#include
int setenv(const char *name, const char *value, int replace);
void unsetenv(const char *name);
setenv()/unsetenv()函数可以完成所有putenv()能做的事。setenv() 可以不受指针限制地向环境变量中添加新值,但传入参数不能为空(NULL)。当replace为0时,如果环境变量中已经有了name项,函数什么也不做(保留原项),否则原项被覆盖。 unsetenv()是用来把name项从环境变量中删除。注意:这两个函数只存在在BSD和GNU 库中,其他如SunOS系统中不包括它们,因此将会带来一些兼容问题。我们可以用 getenv()/putenv()来实现:
int setenv(const char *name, const char *value, int replace)
{
char *envstr;
if (name == NULL || value == NULL)
return 1;
if (getenv(name) !=NULL)
{
envstr = (char *) malloc(strlen(name) + strlen(value) + 2);
sprintf (envstr, "%s=%s", name, value);
if (putenv(envstr));
return 1;
}
return 0;
}
**************************译者增加***********************************/
记住环境变量是被继承的;每一个进程有一个不同的环境变量表拷贝(译者注:从core文件中我们可以看出这一点)。结果是,你不能从一个其他进程改变当前进程的环境变量,比如shell进程。
假设你想得到环境变量‘TERM’的值,你需要使用下面的程序:
char *envvar;
envvar=getenv("TERM");
printf("The value for the environment variable TERM is ");
if(envvar)
{
printf("%s\n",envvar);
}
else
{
printf("not set.\n");
}
现在假设你想创建一个新的环境变量,变量名为‘MYVAR’,值为‘MYVAL’。以下是你将怎样做:
static char envbuf[256];
sprintf(envbuf,"MYVAR=%s","MYVAL");
if(putenv(envbuf))
{
printf("Sorry, putenv() couldn't find the memory for %s\n",envbuf);
/* Might exit() or something here if you can't live without it */
}
#include
int main(int argc, char **argv, char **envp)
{
char *p;
while ((p = *envp++))
printf("%s\n", p);
return 0;
}
虽然这种方法被广泛的操纵系统所支持(译者注:包括DOS),这种方法事实上并没有被POSIX(译者注:POSIX: Portable Operating System Interace)标准所定义。(一般的,它也比较没用)
http://www.linuxforum.net/books/upfaq/x124.htm
怎样检索环境变量(environment variables)的值?
ANSI C标准提供了一个名为getenv()的函数来完成这项任务。getenv()函数很简单一把指向要查找的环境串的指针传递给它,它就返回一个指向该变量值的指针。下面的程序说明了如何从C中获得环境变量PATH的值:
# include
main(int argc, char * * argv)
{
char envValue[l29]; / * buffer to store PATH * /
char * envPtr = envValue ; / * pointer to this buffer * /
envPtr = getenv("PATH"); /* get the PATH */
printf ("PATH= %s\n" , envPtr) ; / * print the PATH * /
}
如果你编译并运行了这个程序,你就会看到与在DOS提示符下输入PATH命令完全相同的结果。事实上,你可以用getenv()检索AUTOEXEC.BAT文件中的或者系统引导后在DOS揭示符下输入的所有环境变量的值。
这里有一个小技巧。当运行Windows时,Windows设置了一个名为WINDIR的新的环境变量,它包含了Windows目录的路径全名。下面这段简单的程序用来检索这个串:
# include
main(int argc, char * * argv)
{
char envValue[l29];
char * envPtr = envValue ;
envPtr = getenv("windir");
/ * print the Windows directory * /
printf("The Windows Directory is %s\n" , envPtr);
}
这个程序还可以用来判断当前是否正在运行Windows,以及DOS程序是否运行在一个DOS shell下,而不是运行在“真正的"DOS下。注意,程序中的windir字符串是小写——这一点很重要,因为它对大小写是敏感的。如果你使用WINDIR,getenv()就会返回一个NULL串(表示变量未找到错误)。
用一putenv()函数也可以设置环境变量。但要注意,该函数不是一个ANSI标准函数,在某些编译程序中它可能不以这个名字出现,或者根本就不存在。你可以用一putenv()函数做许多事情。实际上,在上面那个例子中,Windows正是用这个函数创建了windir环境变量。
http://see.xidian.edu.cn/cpp/html/1641.html
实例:在VC2008中设置运行的临时环境变量
In VS 2008 and VS 2005 at least, you can specify changes to environment variables in the project settings.
Open your project. Go to Project>Properties... Under Configuration Properties>Debugging, edit the 'Environment' value to set environment variables.
For example, if you want to add the directory "c:\foo\bin" to the path when debugging your app, set the 'Environment' value to"PATH=%PATH%;c:\foo\bin".
Here's a screenshot of the setting s dialog:
http://www.404qa.com/q-182.html
参考网址:
http://blog.iyunv.com/lyl8470/article/details/6111765 visual studio 中的环境变量
http://tangzhongxin.blog.163.com/blog/static/89219612011888433810/ Visual Studio 2008 产生的临时文件,和 Windows 环境变量介绍
http://www.iyunv.com/waterlin/archive/2011/10/31/2230341.html Visual Studio 2008 环境变量的配置