当前位置:  技术问答>linux和unix

请教:这个makefile的写法

    来源: 互联网  发布时间:2016-09-19

    本文导语:  在工程目录(Proj)下有如下几个子目录: headers(用于统一存放.a静态库的头文件,以便于其它程序调用.a文件时,统一到该目录下寻找相应的头文件); lib(用于统一存放.a静态库文件,其它程序到该目录下寻找库...

在工程目录(Proj)下有如下几个子目录:
headers(用于统一存放.a静态库的头文件,以便于其它程序调用.a文件时,统一到该目录下寻找相应的头文件);
lib(用于统一存放.a静态库文件,其它程序到该目录下寻找库文件,调用相应的方法);
myMaths(数学功能的.c文件,编译后生成.a静态库(置于上面lib目录下));
operations(应用程序目录,调用上述的数学功能库)。
-----------------------

在headers目录下,有myMaths.h头文件。
其内容为:
int myIntAdd(int a, int b);
int myIntMinus(int a, int b);

在myMaths目录下,有myMaths.c实现文件。
其内容为:
#include "myMaths.h" //希望引用上述../headers/目录下的myMaths.h头文件
int myIntAdd(int a, int b)
{
        return a+b;
}
int myIntMinus(int a, int b)
{
        return a-b;
}
--------------------------------------------

现在想在myMaths目录下,写一个makefile文件,
将myMahts.c中的两个功能函数编译成.a静态库文件,并置于../lib/目录下。

我目前写的makefile为:
myMaths.a : myMaths.o 
        ar rc myMaths.a  myMaths.o
        rm myMaths.o

myMaths.o : myMaths.c 
        g++ -o myMaths.o -c myMaths.c -I ../headers 
clean:
        rm *.o

上述makefiel可以运行,并生成.a文件,
但我不希望写上述的“-I ../headers”,
据说通过VPATH可以设置查找路径,
但由于不会用,发现不起作用(不写-I,就找不到头文件)。


所以,请教各位,
该如何写在myMahts目录下的makefiel文件,
使其能够自动查找../headers目录下的头文件,并生成相应.a文件。

或者,还有什么更好的方法实现上述的需求?

谢谢!!

|
你再改改, 感觉这个不错.


#http://hi.baidu.com/loganx/blog/item/402f1a37e0c5f7380a55a995.html
#=======================================================================================
#
#     Filename: Makefile
# Description:
#
#        Usage: make              (generate executable                      )
#               make clean        (remove objects, executable, prerequisits )
#               make tarball      (generate compressed archive              )
#               make zip          (generate compressed archive              )
#
#      Version: 1.0
#      Created:
#     Revision: ---
#
#       Author:
#      Company:
#        Email:
#
#        Notes: C   extension   : c
#               C++ extensions : cc cpp C
#               C and C++ sources can be mixed.
#               Prerequisites are generated automatically; makedepend is not
#               needed (see documentation for GNU make Version 3.80, July 2002,
#               section 4.13). The utility sed is used.
#              
#============================================== makefile template version 1.6 ==========

# ------------ name of the executable ------------------------------------------------
EXECUTABLE      = test

# ------------ list of all source files ----------------------------------------------
SOURCES         = test.cpp

# ------------ compiler --------------------------------------------------------------
CC              = gcc
CXX             = g++

# ------------ compiler flags --------------------------------------------------------
CFLAGS          = -Wall -O0 -g      # Do not optimize. Produce debugging information.

# ------------ linker-Flags ----------------------------------------------------------
LFLAGS          = -g

# ------------ additional system include directories ---------------------------------
GLOBAL_INC_DIR =

# ------------ private include directories -------------------------------------------
#LOCAL_INC_DIR   = $(HOME)/include
LOCAL_INC_DIR   = $(HOME)/doc/C.Language/newmanlib

# ------------ system libraries (e.g. -lm ) -----------------------------------------
SYS_LIBS        = -lm

# ------------ additional system library directories ---------------------------------
GLOBAL_LIB_DIR =

# ------------ additional system libraries -------------------------------------------
GLOBAL_LIBS     =

# ------------ private library directories -------------------------------------------
LOCAL_LIB_DIR   = $(HOME)/lib

# ------------ private libraries (e.g. libxyz.a ) -----------------------------------
LOCAL_LIBS      =

# ------------ archive generation -----------------------------------------------------
TARBALL_EXCLUDE = *.{o,gz,zip}
ZIP_EXCLUDE     = *.{o,gz,zip}

# ------------ run executable out of this Makefile (yes/no) -------------------------
# ------------ cmd line parameters for this executable -------------------------------
EXE_START       = no
EXE_CMDLINE     =

#=======================================================================================
# The following statements usually need not to be changed
#=======================================================================================

C_SOURCES       = $(filter     %.c, $(SOURCES))
CPP_SOURCES     = $(filter-out %.c, $(SOURCES))
ALL_INC_DIR     = $(addprefix -I, $(LOCAL_INC_DIR) $(GLOBAL_INC_DIR))
ALL_LIB_DIR     = $(addprefix -L, $(LOCAL_LIB_DIR) $(GLOBAL_LIB_DIR))
GLOBAL_LIBSS    = $(addprefix $(GLOBAL_LIB_DIR)/, $(GLOBAL_LIBS))
LOCAL_LIBSS     = $(addprefix $(LOCAL_LIB_DIR)/, $(LOCAL_LIBS))
ALL_CFLAGS      = $(CFLAGS) $(ALL_INC_DIR)
ALL_LFLAGS      = $(LFLAGS) $(ALL_LIB_DIR)
BASENAMES       = $(basename $(SOURCES))

# ------------ generate the names of the object files --------------------------------
OBJECTS         = $(addsuffix .o,$(BASENAMES))

# ------------ generate the names of the hidden prerequisite files -------------------
PREREQUISITES   = $(addprefix .,$(addsuffix .d,$(BASENAMES)))

# ------------ make the executable ---------------------------------------------------
$(EXECUTABLE):    $(OBJECTS)
ifeq ($(strip $(CPP_SOURCES)),)
$(CC) $(ALL_LFLAGS) -o $(EXECUTABLE) $(OBJECTS) $(LOCAL_LIBSS) $(GLOBAL_LIBSS) $(SYS_LIBS)
else                                                                          
$(CXX) $(ALL_LFLAGS) -o $(EXECUTABLE) $(OBJECTS) $(LOCAL_LIBSS) $(GLOBAL_LIBSS) $(SYS_LIBS)
endif
ifeq ($(EXE_START),yes)
./$(EXECUTABLE) $(EXE_CMDLINE)
endif

# ------------ include the automatically generated prerequisites ---------------------
# ------------ if target is not clean, tarball or zip             ---------------------
ifneq ($(MAKECMDGOALS),clean)
ifneq ($(MAKECMDGOALS),tarball)
ifneq ($(MAKECMDGOALS),zip)
include         $(PREREQUISITES)
endif
endif
endif

# ------------ make the objects ------------------------------------------------------
%.o:%.c
$(CC) -c $(ALL_CFLAGS) $

    
 
 

您可能感兴趣的文章:

  • 请教一个简单makefile的写法
  • 请教一个bash脚本的写法
  • 请教一个SHELL的写法
  • 请教一个SH脚本的写法(在线等)
  • 请教一个正则表达式的写法。
  • make 文件的写法,请教大家
  • 请教3个问题:1.setleds设置numlock 2./dev/null写法的作用 3.关于path打通
  • 高分请教Makefile.am的写法
  • 请教一个Shell的写法,很简单的,但急急急
  • 工程化的makefile文件 写法 请教下
  • 请教一个makefile的写法和makedepend的问题
  • 请教含多个文件联编的makefile文件写法模板
  • JSP页面之间如何进行对象序列化传递???请教代码写法.I am online now。
  • 请教2.6内核下的pci卡的驱动写法,分数绝对不是问题,要多少有多少。
  • 请教一个能自动登录FTP 服务器的脚本的 写法? ———— 搞定立刻给分。
  • 请教根据Makefile.am自动生成Makefile的问题
  • 请教点的Makefile文件语法?
  • 请教一个makefile的问题?
  • 请教Makefile文件编写
  • 请教makefile的使用方法。
  • 请教下,各位作MakeFile时用Automake这个工具么
  • 急切请教一个关于makefile的问题,万分感谢。
  • 请教makefile中的 ifeq else default
  • 我是初学,请教大家gdb,dbx,makefile,cc的用法.
  • makefile请教!
  • 请教makefile中的一个规则
  • 请教,Makefile目标文件要通配目录下所有C文件,如何写?
  • 100分请教高手一个Makefile的小问题
  • 请教关于makefile的问题,该怎么写?
  • 请教makefile问题
  • 请教makefile文件编写问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 请教,请教,这个问题是为什么????
  • 请教本地硬盘安装问题请教本地硬盘安装问题
  • ■请教■请教redhat最基本的问题!
  • 请教一个 shell 问题,我用下面这个 shell 语句总是失败,请教
  • 高分请教,各位大侠,请教一个问题,理论高手请进??谢谢
  • 请教Linux下pgadmin3-1.0.2的编译和安装!!高分请教!
  • 各位大虾,请教装了REDHAT9操作系统后,启动时无法引导到LINUX,请教该如何解决啊
  • 请教,请教,,,一定要看!!一定要看!!
  • 请教高手,小弟打印width=1500,height=600(A3纸)的Applet,在预览中是该区域是黑的,打印出来也是黑的,请教高手解决一下
  • :请教高手,小弟打印width=1500,height=600(A3纸)的Applet,在预览中是该区域是黑的,打印出来也是黑的,请教高手解决一下
  • 请教象我这样的硬盘应如何安装Linux,我昨天试装了,但有问题。(老问题了,也看了前面的帖子,但还是来请教,请多指教)
  • 请教这种循环的执行过程
  • 请教两个redhat9问题
  • 请教如何在指定目录下查找包含指定文字的文件
  • 请教局域网中如何通过ip地址得到主机名
  • 请教kdevelop的问题
  • 请教linux 下的adsl拨号问题.
  • 请教,如何用虚拟订机安装liux
  • 【请教】LINUX 下SNMP的MIB开发
  • 请教一个opengl的问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3