Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/125.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将系统环境变量作为宏定义放入C头文件?_C++_C_Makefile_Macros - Fatal编程技术网

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
选项,但在我的情况下无法调整命令行(请参见上文)。