如何将系统环境变量作为宏定义放入C头文件?

时间:2016-11-03 07:13:51

标签: 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放入此标头中。即如果有_SOME_VAR我想将#define _SOME_VAR放入标题中。和其他变种一样。

我不需要以这种方式完成这项任务。一般来说,我需要根据环境变量或其他东西来构建我的程序。我使用make实用程序构建它,但我无法更改makefile的内容,因为它是自动生成的。

我看到我问过config.hconfig.in来自autoconf的{​​{1}},但我不需要那么重的工具就可以做到这么简单(初看起来)任务

提前谢谢!

3 个答案:

答案 0 :(得分:2)

您可以在Visual Studio上使用预处理器选项:"/D"或在gcc上使用"-D"

使用gcc

传递gcc -std=c11 -o demo demo.c -DMY_HOME=\"$HOME\" 环境变量的示例
gcc -std=c11 -o demo demo.c -DMY_HOME=\"$HOME\" -DMY_USER=\"$USER\"

您可以传递多个变量:

{{1}}

答案 1 :(得分:1)

发现它!项目 - >属性并选择C / C ++ Build->设置。 在工具设置下查找预处理器-D选项。在这里添加您想要的environment_variable。这会将-Denvironment_variable添加到您的构建脚本中。

答案 2 :(得分:1)

最佳变体是将这些行放到项目目录中的return;

SELECT 
    UserID, SessionID, 
    MIN(timestamp) StartTime, MAX(timestamp) EndTime,
    DATEDIFF(s,MIN(timestamp), MAX(timestamp)) SecondsDifference
FROM 
    Table
GROUP BY 
    UserID, SessionID

并将makefile.defs添加到项目属性的“其他标志”字段> C / C ++ Build>设置>工具设置>杂。

感谢所有回答的人。