在编译时学习源代码'的文件名[英] Learning the source code's filename at compile time

本文是小编为大家收集整理的关于在编译时学习源代码'的文件名的处理方法,想解了在编译时学习源代码'的文件名的问题怎么解决?在编译时学习源代码'的文件名问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

我使用GCC我; __FILE__返回当前源文件的完整路径和名称.有没有办法得到的只是文件的名称,而不是它的整个路径太(在编译时)?是否有可能做到这一点的可移植的方法?可模板元编程应用到字符串?

我在错误记录宏用这个.我真的不希望我的源的完整路径做它的方式到可执行文件.

谢谢!


解决方案

如果您使用的是make程序,你应该能够事先munge的文件名,并把它作为一个宏GCC在你的程序中使用.

在你的makefile,更改行:

  file.o:file.c中
    GCC -c -o file.o的src / file.c中

  file.o:SRC / file.c中
    海湾合作委员会"-D__MYFILE __ = \\"`基本名$<`\\""-c -o file.o的src / file.c中

这将让你在你的code,而不是使用 __ MYFILE __ __ FILE __ .

使用源文件的基本名的($&LT)是指你可以用它在通用规则,如".c.o"

.

以下code说明它是如何工作的.

的 Makefile文件:的

  mainprog:main.o中的makefile
    GCC -o mainprog main.o中main.o中:SRC / main.c中的makefile
    海湾合作委员会"-D__MYFILE __ = \\"`基本名$<`\\""-c -o main.o中的src / main.c中

的文件的src / main.c中:的

 的#include<&stdio.h中GT;INT主(INT ARGC,CHAR *的argv []){
    的printf("文件=%s的\\ n",__MYFILE__);
    返回0;
}

的从shell中运行:的

  PAX @ PAX-桌面:〜$ mainprog
文件= main.c中
PAX @ PAX-桌面:〜$

请注意这仅包含文件,而不是目录名的基本名称的"文件="行.

本文地址:https://www.itbaoku.cn/post/359009.html