C++ 如何将系统环境变量作为宏定义放入C头文件?
有什么方法可以用与环境变量列表相对应的宏定义来填充头文件 假设我有一个类似头文件的模板:C++ 如何将系统环境变量作为宏定义放入C头文件?,c++,c,makefile,macros,C++,C,Makefile,Macros,有什么方法可以用与环境变量列表相对应的宏定义来填充头文件 假设我有一个类似头文件的模板: #pragma once #ifndef DEFINES_H__INCLUDED #define DEFINES_H__INCLUDED //{{ // I want to place the #defines here... //}} #endif // DEFINES_H__INCLUDED 现在,我可以检查系统中是否定义了一些环境变量(在预定义集合的范围内),并将相应的#define放入此标题中
#pragma once
#ifndef DEFINES_H__INCLUDED
#define DEFINES_H__INCLUDED
//{{
// I want to place the #defines here...
//}}
#endif // DEFINES_H__INCLUDED
现在,我可以检查系统中是否定义了一些环境变量(在预定义集合的范围内),并将相应的#define
放入此标题中。也就是说,如果存在\u SOME\u VAR
,我想将\define\u SOME\u VAR
放在标题中。和其他Var一样
我不需要以这种方式完成这项任务。一般来说,我需要根据环境变量或其他内容来构建程序。我使用make
实用程序构建它,但是我无法更改makefile
的内容,因为它是自动生成的
我看到我问了一些问题,比如从autoconf
中的config.in
创建config.h
,但是我不需要这么重的工具来完成这么简单(乍一看)的任务
提前谢谢你 您可以使用预处理器选项:在Visual Studio上或在gcc上 使用
gcc
传递$HOME
环境变量的示例
gcc -std=c11 -o demo demo.c -DMY_HOME=\"$HOME\"
您可以传递多个变量:
gcc -std=c11 -o demo demo.c -DMY_HOME=\"$HOME\" -DMY_USER=\"$USER\"
您可以使用预处理器选项:在VisualStudio或gcc上 使用
gcc
传递$HOME
环境变量的示例
gcc -std=c11 -o demo demo.c -DMY_HOME=\"$HOME\"
您可以传递多个变量:
gcc -std=c11 -o demo demo.c -DMY_HOME=\"$HOME\" -DMY_USER=\"$USER\"
找到了!项目->属性并选择C/C++生成->设置。
在“工具设置”下找到预处理器-D选项。在此处添加所需的环境变量。这将把-Denvironment\u变量添加到您的构建脚本中。找到它了!项目->属性并选择C/C++生成->设置。
在“工具设置”下找到预处理器-D选项。在此处添加所需的环境变量。这会将-Denvironment\u变量添加到构建脚本中。最佳变体是将这一行放到项目目录中的
makefile.defs
:
ifdef PLATFORM
CFLAGS:=-D$(PLATFORM)
endif
并将$(CFLAGS)
添加到项目属性>C/C++构建>设置>工具设置>杂项的“其他标志”字段中
感谢所有回答的人。最佳变体是将这一行放到项目目录中的
makefile.defs
:
ifdef PLATFORM
CFLAGS:=-D$(PLATFORM)
endif
并将$(CFLAGS)
添加到项目属性>C/C++构建>设置>工具设置>杂项的“其他标志”字段中
感谢所有回答的人。Makefile将如何生成?@Danh,由Eclipse CDT生成。@SergeRoussak将其添加到问题中,guy@SergeRoussak用shell脚本生成上述配置文件相对容易(这至少需要知道您将要使用的shell),您使用的是双重编译保护:
#pragma once
和#ifndef#define
#pragma once
现在已在标准中,因此您只能使用此选项如何生成Makefile?@Danh,由Eclipse CDT生成。@SergeRoussak将其添加到问题中,guy@SergeRoussak用shell脚本生成上述配置文件相对容易(这至少需要知道您将要使用的shell),您使用的是双重编译保护:#pragma once
和#ifndef#define
#pragma once
现在已成为标准,因此您只能使用此选项。我建议使用-DMY\u HOME=\“$HOME\”
,因为\u MY\u HOME
是保留名称,使用它是一种未定义的行为。我知道-D
选项,但在我的情况下,我无法调整命令行(见上文)。我建议改为使用-DMY\u HOME=\“$HOME\”
,因为\u MY\u HOME
是保留名称,使用它是一种未定义的行为。我知道-D
选项,但在我的情况下无法调整命令行(请参见上文)。