Colderleo's blog Colderleo's blog
首页
Linux
C++
Python
前端
工具软件
mysql
索引
关于
GitHub (opens new window)

Colder Leo

热爱代码的打工人
首页
Linux
C++
Python
前端
工具软件
mysql
索引
关于
GitHub (opens new window)
  • bug定位的一些情形
  • c++性能调优,可能的情况
  • total-编程知识点集锦
  • hpc_common.hpp
  • memory order 内存模型
  • 类型推导之auto-template-decltype
  • 完美转发forward源码分析
  • 左值和右值,右值引用、重载 std-move,引用折叠
  • cmake用法
  • alignas、alignof、sizeof实现内存对齐分配
  • 通过宏定义控制debug打印
  • 程序耗时性能测试
  • 线程池开源项目阅读
  • C++类中包含没有默认构造函数的成员
  • C++可变参数模板
  • C++属性继承 public protected private
  • C++智能指针
  • C++导出so的方法,以及extern C 注意事项
  • 四种spin lock
  • condition_variable和unique_lock
  • dpdk、kernel bypass
  • 智能网卡solarflare、Mellanox、X10等
  • 汇编寄存器和常见指令
  • c++ 类的静态成员变量未定义
  • C++获取类成员函数地址
  • preload示例
  • C++异常安全和RAII
  • C++11单例模式
  • C++歪门邪道
  • boost-program-option用法
  • c++17通过模板获取类成员的个数
  • 通过模板实现结构体成员拷贝-按成员名匹配
  • STL学习路径
  • boost库安装使用方法
  • C++文件读写
  • linux下socket通信demo,server和client
  • makefile写法
    • RxCpp
    • C++
    gaoliu
    2021-10-06
    目录

    makefile写法

    # tab和空格缩进

    https://blog.csdn.net/QQ839787886/article/details/108573298 (opens new window)

    makefile实际上是在一个文件中用两种完全不同的“语言”编写的。

    recipe(运行编译器,echo等的命令)是用shell脚本语法编写的。

    不在recipe中的其余makefile是用makefile语法编写的。

    为了使make能够区分recipe和不是recipe的东西,它使用了TAB字符。因此,

    以TAB开头的行被假定为recipe的一部分,因此它们是shell脚本并传递给shell进行解析。

    以空格开头的行不能成为recipe的一部分,它们必须是makefile语法,用空格。

    ifneq是makefile语法:它不能成为recipe的一部分,并且以空格开头。

    结论:

    1、在写makefile语法,非recipe的时候,缩进应该使用空格。

    2、在写shell语法,recipe时,缩进使用TAB。因为实际上我们写的是希望shell执行的语句,所以使用的是shell syntax。而make识别recipe的方式就是。

    # 编译所有cpp

    https://blog.csdn.net/zong596568821xp/article/details/81134406

    linux,假设有若干cpp和h文件在src文件夹下,下面的makefile将生成.o文件在build文件夹下,并可执行文件生成app在当前目录。

    target = app
    src = $(wildcard ./src/*.cpp)
    obj = $(patsubst ./src/%.cpp, ./build/%.o, $(src))
    
    $(target): $(obj)
    	g++ $(obj) -o $(target) -std=c++11 -pthread
    
    ./build/%.o: ./src/%.cpp
    	g++ -c $< -o $@ -std=c++11 -pthread
    
    clean:
    	rm $(obj) $(target)
    
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13

    # ifeq用法

    ifndef mode
        mode = release
    endif
    
    ifeq ($(mode), debug)
    	CFLAGS += -g -O0
    else ifeq ($(mode), release)
    	CFLAGS += -g -O0
    else
    $(error "error: unknown build mode!!!")
    endif
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11

    注意 $(error "xxx") 不能用tab缩进,并且该语句会使make命令终止。

    编辑 (opens new window)
    上次更新: 2023/01/28, 16:16:57
    linux下socket通信demo,server和client
    RxCpp

    ← linux下socket通信demo,server和client RxCpp→

    最近更新
    01
    通过模板实现结构体成员拷贝-按成员名匹配
    05-07
    02
    c++17通过模板获取类成员的个数
    05-01
    03
    avx-sse切换惩罚
    04-30
    更多文章>
    Theme by Vdoing | Copyright © 2019-2023 Colder Leo | MIT License
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式
    ×