最近因为工作关系需要撰写Makefile,因为需要在调试版和发布版之间自动切换。所以单独生成一个文件comp,在comp中有一变量DEBUG_OPTION,其值在调试模式下是"-g -Wall -DDEBUG",在发布模式下是"-Wall -O2".这样在Makefile中include comp,就解决了调试与发布之间的自动切换的问题。但是随着工程的进展,程序需要在多个平台比如Linux、Mac、Solaris,同时运行,由于平台不同,编译选项的不同,如果编写为多个规则写出多个平台的规则的话那是相当的麻烦。所以引入了另外一个文件Rule.make,这个文件处理多个平台的编译选项问题。这样在同一个Makefile中就要包括两个文件,这样问题就来了。代码是这样的:include comp
include Rules.make,但是我惊奇的发现,原来可以用的DEBUG_OPTION,现在不见了。无奈之下在Rules.make中定义了另外的变量它引用comp中的DEBUG_OPTION的值,结果又可以调试了。就这样我发现include文件里变量的使用范围问题。这样Makefile包含Rules.make,而Rules.make内却包含comp,这样问题就解决了。一个变量只能在自己所在的文件和被包含的文件所使用,不能越级使用。比如Makefile就不能直接使用DEBUG_OPTION的值,而必须通过Rules.make间接使用。