Variables 可以将Unfine设置为变量吗?
我在一个嵌入式系统(RTXC)中工作,需要禁用通过#define命令启用的调试器功能。但是,当我将#define更改为undefine时,编译会正常进行,但是当链接器运行时,它会遇到一个错误,该错误与不属于调试代码的符号有关(该错误应该由未定义的调试器变量处理)。Make是否有办法确保预处理器变量未定义或未定义?否。您需要修复代码中的错误 更具体地说,有些东西引用了ifdef之外的调试方面的东西。Make在那里帮不了你Variables 可以将Unfine设置为变量吗?,variables,makefile,preprocessor,Variables,Makefile,Preprocessor,我在一个嵌入式系统(RTXC)中工作,需要禁用通过#define命令启用的调试器功能。但是,当我将#define更改为undefine时,编译会正常进行,但是当链接器运行时,它会遇到一个错误,该错误与不属于调试代码的符号有关(该错误应该由未定义的调试器变量处理)。Make是否有办法确保预处理器变量未定义或未定义?否。您需要修复代码中的错误 更具体地说,有些东西引用了ifdef之外的调试方面的东西。Make在那里帮不了你 另一种可能性是,您有一个.o或从以前的构建中遗留下来的东西;您可能希望尝试清
另一种可能性是,您有一个.o或从以前的构建中遗留下来的东西;您可能希望尝试清理生成树。您的问题的答案是否定的,Make不能绝对阻止变量由代码中的#define表达式定义
你似乎有个难以捉摸的问题。它可能是makefile中的一个bug、一个拼写错误的指令、一个错误的宏(如果您不介意重言式的话)或者一些琐碎的东西。我建议烧毁森林:把所有东西都砍掉,直到问题停止,然后看看它藏在哪里。如果您进入HelloWorld,问题仍然存在,请告诉我们。请编辑这些标记,“make”、“define”、“undef”不是好的SO标记。@Amr:我同意define和under,但make是一个好的SO标记,因为它引用了特定的工具。不幸的是,我已经完成了这两个标记,链接问题仍然存在。我检查了变量的每个用法,并保证它们都包含在#ifdef块中,我还确保项目生成的最后一个a、o等都从构建目录中清除(和/或新构建)。谢谢你的回复nonetheless@Alex马歇尔:你的编译器没有告诉你不满意的引用来自哪里吗(通常是第一个位置)?你对目标文件或库运行“nm-g”来定位它们了吗?@Jonathan Leffler:我使用的是嵌入式操作系统RTXC。编译器告诉我问题来自一个内核库:librtxc.anm-glibrtxc.a'告诉我引用在rtxcasm.o中。这些库正在从头开始重新编译,CBUG变量尚未定义,但对_isrcnt的引用仍然存在。我已经检查了对isrcnt的所有引用,它们都正确地包含在#ifdef CBUG标记中,因此我看不出有任何理由将任何#isrcnt符号编译到rtxcasm.o对象文件中。顺便说一句,谢谢你的“nm-g”,我不知道