【发布时间】:2013-04-09 06:28:30
【问题描述】:
GCC官方文档中的以下链接:
http://gcc.gnu.org/onlinedocs/gcc/Environment-Variables.html
解释以下环境变量:
LANG
LC_CTYPE
LC_MESSAGES
LC_ALL
TMPDIR
GCC_COMPARE_DEBUG
GCC_EXEC_PREFIX
COMPILER_PATH
LIBRARY_PATH
CPATH
C_INCLUDE_PATH
CPLUS_INCLUDE_PATH
OBJC_INCLUDE_PATH
DEPENDENCIES_OUTPUT
SUNPRO_DEPENDENCIES
但我之前也听说过/读过这些其他编译标志:
- 用于编译 C 代码:
CC,CFLAGS - 用于编译 C++ 代码:
CXX、CPPFLAGS
以及链接标志:
- 链接阶段:
LDFLAGS - 代码编译后:
LD_LIBRARY_PATH
CC、CFLAGS、CXX、CPPFLAGS 是什么意思?为什么它们没有包含在gcc 的官方环境变量列表中?
【问题讨论】:
-
它们与 GCC 无关。它们只是 Unix 上的一种约定,因此在 Unix 系列中得到了开箱即用的支持。我猜它们成为了一种约定,因为按照约定,普通的 makefile 往往依赖于这些变量。许多构建系统(例如 Autotools)也采用了这种约定,并使用相似的变量来表示相同的事物。老实说,这些标志完全是一堆废话(可能除了
LD_LIBRARY_PATH),每次遇到它们时,我都会想起60年代。如果您使用的是现代构建(您应该是)系统,您可以忘记它们。 -
LD_LIBRARY_PATH用于指出共享库所在的目录,以便依赖这些共享库的应用程序可以正确地(动态地)链接到它们。正如您再次看到的,这与软件开发和 GCC 无关,而只是 Unix 系列如何处理动态链接、软件组件的安装路径及其执行的一个特性/概念。如果您对这些 cmets 感到满意,我可以将它们制定为答案。随时问更多。 -
是的@Haroogan。欢迎您将其制定为答案,因为这已经提供了很多信息。不确定我是否会接受任何东西,因为我想给线程一些时间来收集答案。
标签: gcc build linker environment-variables