rio*_*oki 7 filenames gcc c-preprocessor
我(是)使用__FILE__
和__LINE__
宏从我的代码中打印诊断消息.当您将GCC与make一起使用时,这非常有效,该文件与您在命令行中指定的文件一样短.我最近切换到使用CodeLite,它在构建时使用完全限定的文件名(至少在windows下).突然间,我的诊断输出几乎无法读取.
有没有办法在预处理器中只获取文件名的文件组件?我可以使用非便携式GCC特定解决方案.(我将回到__FILE__
其他案件.)
当然我可以通过__FILE__
函数传递内容并仅提取文件组件,但字符串操作不是我想到的诊断消息,不应该改变运行时行为...
注意:我使用GNU使用它的方式使用文件名.Path是文件名的集合,文件名是文件的相对或绝对标识符.文件名可以由目录组件和文件组件组成.
如果您正在使用GNU Make,那么您可以在编译的预处理阶段简单地传递-D BASE_FILE_NAME = \"$*.c \"(如果您单独执行它们,或者在单个阶段进行编译,这是规范).
这取决于您确定文件名的方式.我来自普通文件名列表,并在稍后阶段使用makefile中的函数作为目录前缀.
IE,这适合我,但你的里程可能会有所不同!:-)
我的make"代码"的简化版本:
CLASSES = main.c init.c
PREPROCESSED = $(patsubst %.c,$(PPCDIR)/%.pp.c,$(CLASSES))
$(PREPROCESSED): $(PPCDIR)/%.pp.c: %.c $(ALLH)
$(GCC) $(GCCOPTS) -D BASE_FILE_NAME=\"$*\" -E $< > $@
Run Code Online (Sandbox Code Playgroud)
您可以根据需要在代码中使用BASE_FILE_NAME :-)
小智 5
为了回复上面的FredCooke,您可以交换以下行:
-D BASE_FILE_NAME=\"$*.c\"
Run Code Online (Sandbox Code Playgroud)
带有:
-D BASE_FILE_NAME=\"$(<F)\"
Run Code Online (Sandbox Code Playgroud)
这也将为您提供适当的文件名扩展名,以及.cpp文件名。
没有已知的预处理器宏可以提供该功能。传递__FILE__
函数似乎是唯一明智的选择。
归档时间: |
|
查看次数: |
9712 次 |
最近记录: |