C编程 - 在编译时获取机器名,用户名

时间:2016-10-06 17:09:33

标签: c compilation

是否有一组在编译时创建的定义,我可以使用这些定义来填充printk语句,其中包含有关上次构建内核驱动程序的位置和人员的信息?我知道有预定义的C宏,我希望在那里找到一些动态设置的东西,因为编译开始了,但似乎并没有。

这也是GCC特有的。提前谢谢。

1 个答案:

答案 0 :(得分:1)

扩大我的评论;你可以使用make的shell函数,以防你使用make。

在makefile中看起来像这样:

USER=$(shell whoami)
HOST=$(shell hostname)

CXX=gcc
CXX_DEFINES=-D__BUILD_USER=\"$(USER)\" -D__BUILD_HOST=\"$(HOST)\"
CXX_FLAGS=-c -Wall -Wextra $(CXX_DEFINES)
CXX_LFLAGS=
SOURCES=main.c
OBJECTS=$(SOURCES:.c=.o)

EXEC=hostusertest

all: $(SOURCES) $(EXEC)

clean:
    rm $(OBJECTS)
    rm $(EXEC)

$(EXEC): $(OBJECTS)
    $(CXX) -o $@ $(OBJECTS) $(CXX_LFLAGS)

%.o: %.c
    $(CXX) $(CXX_FLAGS) $<

基本上只需使用标准shell命令来收集信息并在makefile中创建一个变量,该变量在使用shell函数$(shell ...)之后保存该信息。

然后只需通过-D NAME=VALUE设置它,但不要忘记添加转义的qoutation标记。