c-如何使用gcc在编译时检测系统区域设置



我正在使用gcc编译一个C程序(它旨在尽可能地可移植(,并且我有一个单独的模块,我在其中定义了我想要使用的所有字符串常量。然后,这些被定义为代码其余部分使用的包含文件中的外部常量。

我想根据用户的语言环境使用一组不同的字符串常量,我目前的想法是简单地定义一个具有所需语言设置的符号,并使用预处理器有条件地编译适当的值。(是的,这确实假设用户将自己编译程序(。

如果我走这条路,我可以使用从命令行获得当前的语言设置

$ echo $LANG | cut -f 1 -d '.'
en_GB

但我还没能用它来定义make文件中的符号"en_GB"(使用-D(。

当然,也许还有更好的方法来解决这个问题!

在运行时选择正确的字符串常量可能会更好,但我不想更新任何源代码,而不是在定义字符串常量的模块中。

感谢

如何使用gcc在编译时检测系统区域设置?

按照您想要的方式,这是不可能的。gcc编译代码,它不会检测系统区域设置。


用一些前缀传递区域设置。

-DLANG_$(echo $LANG | cut -f 1 -d '.')=1

然后用预处理器检查宏是否定义了

#if LANG_en_US
stuff
#endif

要在Makefile中使用shell脚本,必须使用shell。

CFLAGS += -DLANG_$(shell echo $$LANG | cut -f 1 -d '.')=1

最新更新