【问题标题】:C programming - picking up the machine name, username at compile timeC 编程 - 在编译时获取机器名、用户名
【发布时间】:2016-10-06 17:09:32
【问题描述】:

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

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

【问题讨论】:

  • 您可以通过 -D 预处理器选项使用构建脚本设置它们。
  • 我假设是 Linux - 您可能希望添加 linux-kernel 标签。您可以执行类似于 Linux 内核构建创建“include/generated/compile.h”文件的方式,其中涉及“init/Makefile”调用“scripts/mkcompile_h”。

标签: c compilation


【解决方案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 设置它,但不要忘记添加转义的引号。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-20
    • 1970-01-01
    • 1970-01-01
    • 2015-04-17
    • 2020-07-31
    • 1970-01-01
    • 2016-03-11
    • 1970-01-01
    相关资源
    最近更新 更多