Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >去掉宏__FILE__的路径

去掉宏__FILE__的路径

作者头像
coderhuo
发布于 2018-08-29 07:24:26
发布于 2018-08-29 07:24:26
4.2K10
代码可运行
举报
文章被收录于专栏:coderhuocoderhuo
运行总次数:0
代码可运行

本文介绍如何去掉宏__FILE__的路径,只显示文件名。

宏__FILE__展开后会带有路径信息,比如下面的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include<stdio.h>
#include<stdlib.h>

int main()
{
	printf("file_name:%s\n", __FILE__);
	return 0;
}

如果Makefile内容如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CFALG = -Wall

all: /home/helloworld/test.c
	gcc $(CFALG) $< -o test

编译运行,程序输出为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
file_name:/home/helloworld/test.c

为了不让宏_FILE__带有路径信息,可以在Makefile中重定义宏__FILE_

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
CFALG = -Wall
CFALG += -U__FILE__ -D__FILE__='"$(subst $(dir $<),,$<)"'

all: /home/helloworld/test.c
	gcc $(CFALG) $< -o test

编译运行,程序输出为:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
file_name:test.c

取消宏_FILE__会产生编译警告,如果不想产生警告,可以考虑新建一个宏, 比如__FILENAME_

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-04-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
新的cmake版本已经变了,比如3.21.2。偷懒的话可以用$@凑合一下
新的cmake版本已经变了,比如3.21.2。偷懒的话可以用$@凑合一下
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
C编译: makefile基础
在编译一个大型项目的时候,往往有很多目标文件、库文件、头文件以及最终的可执行文件。不同的文件之间存在依赖关系(dependency)。比如当我们使用下面命令编译时: $gcc -c -o test.o
Vamei
2018/01/18
1.2K0
C编译: makefile基础
Linux下的make命令用法
Linux 下 make 命令是系统管理员和程序员用的最频繁的命令之一。管理员用它通过命令行来编译和安装很多开源的工具,程序员用它来管理他们大型复杂的项目编译问题。本文我们将用一些实例来讨论 make 命令背后的工作机制。 Make 如何工作的 对于不知道背后机理的人来说,make 命令像命令行参数一样接收目标。这些目标通常存放在以 “Makefile” 来命名的特殊文件中,同时文件也包含与目标相对应的操作。更多信息,阅读关于 Makefiles 如何工作的系列文章。 当 make 命令第一次执行时,它扫描
老白
2018/03/19
17.9K1
gcc命令的常用选项_curl常用命令及参数
gcc是GUN C和C++编译器,我们通常使用GCC时,编译器会依次做如下工作:preprocess(预处理),compilation(编译),assembly(汇编),link(链接)。gcc提供了一些选项参数能够让编译器停在某个过程(如编译过程),比如 -c选项表示只走到“汇编”这一步,生成的是汇编后的目标文件。本文主要介绍gcc常用的选项参数及其作用。 1.-c 对源代码进行预处理、编译、汇编,但不执行链接,产生的是源代码的目标文件(*.o)
全栈程序员站长
2022/11/04
7100
【嵌入式】C语言程序调试和宏使用的技巧
在Linux使用gcc编译程序的时候,对于调试的语句还具有一些特殊的语法。gcc编译的过程中,会生成一些宏,可以使用这些宏分别打印当前源文件的信息,主要内容是当前的文件、当前运行的函数和当前的程序行。
混说Linux
2022/07/14
7840
深入浅出GCC编译器
GCC原名为GNU C语言编译器(GNU C Compiler),只能对C语言进行编译等处理。后来随着其功能的扩展,可以支持更多编程语言,如C++、Java、Fortran、Pascal、Objective -C、Ada、Go以及各类处理器架构上的汇编语言等。所以,现在我们所说的GCC是指GNU编译器套件(GNU Compiler Collection)。本文将带你迈入GCC的大门,了解一个C源文件是如何在GCC编译工具链的加工下成为一个可执行性文件的,并详细讲解GCC编译参数以及可能会用到的其他知识。
mindtechnist
2024/08/08
9410
深入浅出GCC编译器
makefile 的 ifdef, ifeq 使用及辨析
#可以用命令行传递变量 RELEASE = abc #ifdef 变量名称不能加$() ifdef RELEASE $(warning RELEASE defined) else $(warning RELEASE not defined) endif #ifeq 后面参数要叫$(), 因为是值引用, 值可以为数值或字符串 ifeq ($(RELEASE),abc) $(warning RELEASE eqal abc) else $(warning RELEASE not equal abc) endif all: @echo ok! ************************************************** make 编译不同版本,例如debug, release 的简单示例。 用make 变量ver, 控制CFLAGS 变量,从而编译出不同版本。 [/pts/2@hjj ~/test]$ cat test.c #include <stdio.h> #include <unistd.h> int main(int argc,char *argv[]) { char *tty=ttyname(0); printf("tty is %s\n",tty); return 0; } [/pts/2@hjj ~/test]$ cat Makefile CC = gcc TARGET = test OBJS = test.o ifeq ($(ver), debug) $(warning ver is debug) CFLAGS = -g -Ddebug else $(warning ver is not debug) CFLAGS = -c -O3 endif $(TARGET): $(OBJS) $(CC) -o $@ $^ clean: rm test test.o 注释: makefile 采用了ifeq-else-endif 结构 可以判别莫个make变量是否定义。 make变量可以在makefile中定义,也可以由make命令行传递。 由于makefile 支持环境变量,所以你预先定义了环境变量,也可以不在命令行中传递而直接使用环境变量 这种机制使得编写脚本控制不同的复杂的编译成为可能, 例如支持各种地域的不同的版本。用地域变量,控制make的编译选项/D,控制编译出不同的版本 ---------------------------------------- 编译debug 版本, 从命令行传递变量 ---------------------------------------- [/pts/2@hjj ~/test]$ make ver=debug Makefile:6: ver is debug gcc -g -Ddebug -c -o test.o test.c gcc -o test test.o ---------------------------------------- 清理,无所谓版本信息 ---------------------------------------- [/pts/2@hjj ~/test]$ make clean Makefile:9: ver is not debug rm test test.o ---------------------------------------- 编译release 版本 ---------------------------------------- [/pts/2@hjj ~/test]$ make Makefile:9: ver is not debug gcc -c -O3 -c -o test.o test.c gcc -o test test.o
战神伽罗
2019/07/24
8.4K1
C/C++:程序环境和预处理/宏
在ANSI C的任何一种实现中,存在两个不同的环境。第1种是翻译环境,在这个环境中源代码被转换为可执行的机器指令。第2种是执行环境,它用于实际执行代码。
二肥是只大懒蓝猫
2023/03/30
7150
C/C++:程序环境和预处理/宏
vscode基于Linux和Windows下c/c++的多文件编译与连接
cygwin64/home/xxx/.bash_profile ,末尾加上如下代码(后面vscodeMake.bat要用到环境变量"_T"):
战神伽罗
2019/07/24
3.2K0
C中的预编译宏定义
文章来自 http://www.uml.org.cn/c++/200902104.asp 在将一个C源程序转换为可执行程序的过程中, 编译预处理是最初的步骤. 这一步骤是由预处理器(preprocessor)来完成的. 在源流程序被编译器处理之前, 预处理器首先对源程序中的"宏(macro)"进行处理. C初学者可能对预处理器没什么概念, 这是情有可原的: 一般的C编译器都将预处理, 汇编, 编译, 连接过程集成到一起了. 编译预处理往往在后台运行. 在
杨奉武
2018/04/18
3.2K0
【linux】gcc makefile
我们的C程序中,并没有定义“printf”的函数实现,且在预编译中包含的“stdio.h”中也只有该函数的声明,而没有定义函数的实现,那么,是在哪里实“printf”函数的呢?
用户11029103
2024/09/25
5200
【linux】gcc makefile
【C语言篇】编译和链接以及预处理介绍(上篇)
本篇博客只是针对上层应用对编译链接过程进行一个笼统的介绍,让C语言初学者对于编译和链接有一个基本的印象轮廓,具体的内容学校计算机专业会有专门这样一节课,需要学的东西还是很多的哈😘
半截诗
2024/10/09
2050
【C语言篇】编译和链接以及预处理介绍(上篇)
Makefile 使用总结
http://www.cnblogs.com/wang_yb/p/3990952.html
bear_fish
2018/09/20
3.8K0
php autoconf 配置,automake,autoconf使用详解
作为Linux下的程序开发人员,大家一定都遇到过Makefile,用make命令来编译自己写的程序确实是很方便.一般情况下,大家都是手工写一个简单Makefile,如果要想写出一个符合自由软件惯例的Makefile就不那么容易了.
全栈程序员站长
2022/08/19
8400
linux与g++基本知识「建议收藏」
GCC:GNU Compiler Collection(GUN 编译器集合),它可以编译C、C++、JAV、Fortran、Pascal、Object-C、Ada等语言。
全栈程序员站长
2022/09/22
1.5K0
Linux从入门到精通(九)——Linux编程
vi的工作是在文本缓冲区中实现的,为了帮助用户观看, 可为文本的行设置一个行号, 放在文本的左侧(行首前) 可以用末行命令set来设置和取消:
传说之下的花儿
2023/04/16
2.2K0
Linux从入门到精通(九)——Linux编程
6_Makefile与GCC
​ 简单地说,我们在PC机上编译程序时,这些程序是在PC机上运行的。我们想让一个程序在ARM板子上运行,怎么办?
韦东山
2022/05/05
3.8K0
6_Makefile与GCC
程序环境和预处理
在ANSI C的任何一种实现中,存在两个不同的环境 第1种是翻译环境,在这个环境中源代码被转换为可执行的机器指令。 第2种是执行环境,它用于实际执行代码。
绝活蛋炒饭
2024/12/16
1750
程序环境和预处理
【C】程序环境和预处理
相关指令gcc -S test.c 编译完成之后就停下来,结果保存在test.s中。
阿伟@t
2023/10/10
2430
【C】程序环境和预处理
GDB调试入门,看这篇就够了
GDB(GNU Debugger)是UNIX及UNIX-like下的强大调试工具,可以调试ada, c, c++, asm, minimal, d, fortran, objective-c, go, java,pascal等语言。本文以C程序为例,介绍GDB启动调试的多种方式。
编程珠玑
2019/07/23
7.9K0
GDB调试入门,看这篇就够了
实用 | 10分钟教你通过网页点灯
上一篇我们已经基于我们的开发板搭好了一个基于boa的web服务器:实用 | 10分钟教你搭建一个嵌入式web服务器。这一篇接着分享如何使用网页来点灯。
用户2366192
2021/08/27
7320
实用 | 10分钟教你通过网页点灯
相关推荐
C编译: makefile基础
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验