zoukankan      html  css  js  c++  java
  • make 写法练习

    cc=g++

    all:signal

    %:%.o
    $(cc) -o $< $@

    %.cpp:%.o
    echo se $< $@ $* $^
    g++ -c $< $@
    cl:
    rm -rf *.o signal
    [root@localhost signal]#

    下面来一个完整版的 

    有一个cpp源文件 跟makefile在同一目录  有一个头文件在子目录 subPath

    源文件为一个简单的输出 hello

    makefile如下

    cc=g++
    obj=signal.o
    VPATH=./subPath
    all:signal
    %:%.o
    echo fi
    $(cc) $< -o $@
    $(obj):%.o:%.cpp
    echo se $< $@ $* $^
    $(cc) -c -I./subPath $<
    cl:
    rm -rf *.o signal
    [root@localhost signal]#

     主要说明如下:很多时候其实是对的 不仔细目标中:左边是目标 右边依赖 不要搞错了 搞错了有时却可以是因为 系统默认会推出编译命令而不是你给出的命令

    这一点在执行make后输出可看,可用用echo输出看一下调到自己的命令没

    还可以去掉指定

    ~
    [root@localhost signal]# cat makefile
    cc=g++
    VPATH=./subPath
    all:signal
    %:%.o
    echo fi
    $(cc) $< -o $@
    %.o:%.cpp
    echo se $< $@ $* $^
    $(cc) -c -I./subPath $<
    cl:
    rm -rf *.o signal
    [root@localhost signal]#

    表示的是会根据 all中目标找 同名的 cpp编成 o 再链接成 bin ,如果有头文件的话会到 VPATH中去搜,但是要注意指写 -I参数 

    这个参数可用shell脚本拼相对目录,但是makefile是不能为你做什么。必须手动指定。如果有库的话还要指定 -L 参数 lib的文件路径

    [root@localhost bin]# cat makefile
    #basePath=/home/ctest/signal
    basePath=..
    VPATH=$(basePath)/heard:$(basePath)/src:$(basePath)/o
    cc=gcc
    obj =signal
    all:$(obj)

    $(obj):%:%.o
    echo make the bin
    $(cc) $(basePath)/o/$< -o $(basePath)/bin/$@
    %.o:%.cpp
    echo make the .o file
    $(cc) -c -I$(basePath)/heard $< -o $@
    mv $@ $(basePath)/o
    cl:
    rm -rf $(basePath)/o/*.o $(basePath)/bin/signal $(basePath)/*.o $(basePath)/signal $(basePath)/bin/*.o
    [root@localhost bin]#

    注意目录名不要写错了,还有就是变量中二进制目标那层是不能直接写成%:%.o 的而要写成$(obj):%:%.o

    还要特别注意的是前面带了具体的值时$<之类的自动变量取出来的是 $(obj)里面的目标字符串,并不带目录的,而通配符在前面的目标命令中

    的自动变量是自动会加上找到的文件的目录路径的。如%.o:%.cpp这个。

    总结一下就是

       因为上层目标给出的就只有一个字符串,(不然人家也不知道你要生成啥,总有个头)

       你给出目标后才会去找生成这个目标的依赖,而找到的值才会有全路径的。

  • 相关阅读:
    scrapy中selenium的应用
    Django的锁和事务
    redis
    【leetcode】187. Repeated DNA Sequences
    【leetcode】688. Knight Probability in Chessboard
    【leetcode】576. Out of Boundary Paths
    【leetcode】947. Most Stones Removed with Same Row or Column
    【leetcode】948. Bag of Tokens
    【leetcode】946. Validate Stack Sequences
    【leetcode】945. Minimum Increment to Make Array Unique
  • 原文地址:https://www.cnblogs.com/heling/p/3443342.html
Copyright © 2011-2022 走看看