zoukankan      html  css  js  c++  java
  • buildconfiguration[C/C++]_[从netbeans里提取的通用构建C++项目的Makefile文件]

    发一下牢骚和主题无关:

        

        1.有了这个配置文件,你可以用任何ide或文本编辑器,除了不支持makefile的ide。

        2.makefile的利益不用说吧,不依赖ide,如果g++或ide更新了的话makefile什么都不需要做。但是基于项目文件的编译配置就难了,比如vs2010项目如果想用vs2005编译的话。。。。

        3.makefile从编译到链接选项都可以自己控制。

        4个文件,当然有时间的话也可以自己改改减少数量,自己删除注释吧。build和configuration

        主 Makefile,放在项目根目录下.

    #
    #  There exist several targets which are by default empty and which can be 
    #  used for execution of your targets. These targets are usually executed 
    #  before and after some main targets. They are: 
    #
    #     .build-pre:              called before 'build' target
    #     .build-post:             called after 'build' target
    #     .clean-pre:              called before 'clean' target
    #     .clean-post:             called after 'clean' target
    #     .clobber-pre:            called before 'clobber' target
    #     .clobber-post:           called after 'clobber' target
    #     .all-pre:                called before 'all' target
    #     .all-post:               called after 'all' target
    #     .help-pre:               called before 'help' target
    #     .help-post:              called after 'help' target
    #
    #  Targets beginning with '.' are not intended to be called on their own.
    #
    #  Main targets can be executed directly, and they are:
    #  
    #     build                    build a specific configuration
    #     clean                    remove built files from a configuration
    #     clobber                  remove all built files
    #     all                      build all configurations
    #     help                     print help mesage
    #  
    #  Targets .build-impl, .clean-impl, .clobber-impl, .all-impl, and
    #  .help-impl are implemented in nbproject/makefile-impl.mk.
    #
    #  Available make variables:
    #
    #     CND_BASEDIR                base directory for relative paths
    #     CND_DISTDIR                default top distribution directory (build artifacts)
    #     CND_BUILDDIR               default top build directory (object files, ...)
    #     CONF                       name of current configuration
    #     CND_PLATFORM_${CONF}       platform name (current configuration)
    #     CND_ARTIFACT_DIR_${CONF}   directory of build artifact (current configuration)
    #     CND_ARTIFACT_NAME_${CONF}  name of build artifact (current configuration)
    #     CND_ARTIFACT_PATH_${CONF}  path to build artifact (current configuration)
    #     CND_PACKAGE_DIR_${CONF}    directory of package (current configuration)
    #     CND_PACKAGE_NAME_${CONF}   name of package (current configuration)
    #     CND_PACKAGE_PATH_${CONF}   path to package (current configuration)
    #
    # NOCDDL
    
    
    # Environment 
    MKDIR=mkdir -p
    CP=cp
    CCADMIN=CCadmin
    
    # build
    build: .build-init .build-post
    
    .build-init:
    
    .build-pre:
    # Add your pre 'build' code here...
    	windres --input-format=rc -O coff -i resources/style.rc -o build/style.o --define __WXMSW__ --include-dir E:/software/Lib/gui/wxWidgets-2.9.2/include
    	
    .build-post: .build-impl
    # Add your post 'build' code here...
    	${CP} E:/software/Lib/gui/wxWidgets-2.9.2/win32/release/share/wxmsw292u_adv_gcc_custom.dll dist/Debug/MinGW-Windows/
    	${CP} E:/software/Lib/gui/wxWidgets-2.9.2/win32/release/share/wxmsw292u_core_gcc_custom.dll dist/Debug/MinGW-Windows/
    	${CP} E:/software/Lib/gui/wxWidgets-2.9.2/win32/release/share/wxbase292u_gcc_custom.dll dist/Debug/MinGW-Windows/
    	${CP} E:/software/MinGW/bin/libgcc_s_dw2-1.dll dist/Debug/MinGW-Windows/
    	
    # clean
    clean: .clean-post
    
    .clean-pre:
    # Add your pre 'clean' code here...
    
    .clean-post: .clean-impl
    # Add your post 'clean' code here...
    
    
    # clobber
    clobber: .clobber-post
    
    .clobber-pre:
    # Add your pre 'clobber' code here...
    
    .clobber-post: .clobber-impl
    # Add your post 'clobber' code here...
    
    
    # all
    all: .all-post
    
    .all-pre:
    # Add your pre 'all' code here...
    
    .all-post: .all-impl
    # Add your post 'all' code here...
    
    
    # build tests
    build-tests: .build-tests-post
    
    .build-tests-pre:
    # Add your pre 'build-tests' code here...
    
    .build-tests-post: .build-tests-impl
    # Add your post 'build-tests' code here...
    
    
    # run tests
    test: .test-post
    
    .test-pre:
    # Add your pre 'test' code here...
    
    .test-post: .test-impl
    # Add your post 'test' code here...
    
    
    # help
    help: .help-post
    
    .help-pre:
    # Add your pre 'help' code here...
    
    .help-post: .help-impl
    # Add your post 'help' code here...
    
    
    
    # include project implementation makefile
    include nbproject/Makefile-impl.mk
    
    # include project make variables
    include nbproject/Makefile-variables.mk

        根目录下建nbproject文件夹,放入以下文件。

        Makefile-variables.mk 这个文件不需要管

    #
    # Generated - do not edit!
    #
    # NOCDDL
    #
    CND_BASEDIR=`pwd`
    CND_BUILDDIR=build
    CND_DISTDIR=dist
    # Debug configuration
    CND_PLATFORM_Debug=MinGW-Windows
    # Release configuration
    CND_PLATFORM_Release=MinGW-Windows

        Makefile-impl.mk 这个文件不需要管

        每日一道理
    爱,有的时候不需要山盟海誓的承诺,但她一定需要细致入微的关怀与问候;爱,有的时候不需要梁祝化蝶的悲壮,但她一定需要心有灵犀的默契与投合;爱,有的时候不需要雄飞雌从的追随,但她一定需要相濡以沫的支持与理解。
    # 
    # Generated Makefile - do not edit! 
    # 
    # Edit the Makefile in the project folder instead (../Makefile). Each target
    # has a pre- and a post- target defined where you can add customization code.
    #
    # This makefile implements macros and targets common to all configurations.
    #
    # NOCDDL
    
    
    # Building and Cleaning subprojects are done by default, but can be controlled with the SUB
    # macro. If SUB=no, subprojects will not be built or cleaned. The following macro
    # statements set BUILD_SUB-CONF and CLEAN_SUB-CONF to .build-reqprojects-conf
    # and .clean-reqprojects-conf unless SUB has the value 'no'
    SUB_no=NO
    SUBPROJECTS=${SUB_${SUB}}
    BUILD_SUBPROJECTS_=.build-subprojects
    BUILD_SUBPROJECTS_NO=
    BUILD_SUBPROJECTS=${BUILD_SUBPROJECTS_${SUBPROJECTS}}
    CLEAN_SUBPROJECTS_=.clean-subprojects
    CLEAN_SUBPROJECTS_NO=
    CLEAN_SUBPROJECTS=${CLEAN_SUBPROJECTS_${SUBPROJECTS}}
    
    
    # Project Name
    PROJECTNAME=
    
    # Active Configuration
    DEFAULTCONF=Debug
    CONF=${DEFAULTCONF}
    
    # All Configurations
    ALLCONFS=Debug Release 
    
    
    # build
    .build-impl: .build-pre .validate-impl .depcheck-impl
    	@#echo "=> Running $@... Configuration=$(CONF)"
    	"${MAKE}" -f nbproject/Makefile-${CONF}.mk QMAKE=${QMAKE} SUBPROJECTS=${SUBPROJECTS} .build-conf
    
    
    # clean
    .clean-impl: .clean-pre .validate-impl .depcheck-impl
    	@#echo "=> Running $@... Configuration=$(CONF)"
    	"${MAKE}" -f nbproject/Makefile-${CONF}.mk QMAKE=${QMAKE} SUBPROJECTS=${SUBPROJECTS} .clean-conf
    
    
    # clobber 
    .clobber-impl: .clobber-pre .depcheck-impl
    	@#echo "=> Running $@..."
    	for CONF in ${ALLCONFS}; \
    	do \
    	    "${MAKE}" -f nbproject/Makefile-$${CONF}.mk QMAKE=${QMAKE} SUBPROJECTS=${SUBPROJECTS} .clean-conf; \
    	done
    
    # all 
    .all-impl: .all-pre .depcheck-impl
    	@#echo "=> Running $@..."
    	for CONF in ${ALLCONFS}; \
    	do \
    	    "${MAKE}" -f nbproject/Makefile-$${CONF}.mk QMAKE=${QMAKE} SUBPROJECTS=${SUBPROJECTS} .build-conf; \
    	done
    
    # build tests
    .build-tests-impl: .build-impl .build-tests-pre
    	@#echo "=> Running $@... Configuration=$(CONF)"
    	"${MAKE}" -f nbproject/Makefile-${CONF}.mk SUBPROJECTS=${SUBPROJECTS} .build-tests-conf
    
    # run tests
    .test-impl: .build-tests-impl .test-pre
    	@#echo "=> Running $@... Configuration=$(CONF)"
    	"${MAKE}" -f nbproject/Makefile-${CONF}.mk SUBPROJECTS=${SUBPROJECTS} .test-conf
    
    # dependency checking support
    .depcheck-impl:
    	@echo "# This code depends on make tool being used" >.dep.inc
    	@if [ -n "${MAKE_VERSION}" ]; then \
    	    echo "DEPFILES=\$$(wildcard \$$(addsuffix .d, \$${OBJECTFILES}))" >>.dep.inc; \
    	    echo "ifneq (\$${DEPFILES},)" >>.dep.inc; \
    	    echo "include \$${DEPFILES}" >>.dep.inc; \
    	    echo "endif" >>.dep.inc; \
    	else \
    	    echo ".KEEP_STATE:" >>.dep.inc; \
    	    echo ".KEEP_STATE_FILE:.make.state.\$${CONF}" >>.dep.inc; \
    	fi
    
    # configuration validation
    .validate-impl:
    	@if [ ! -f nbproject/Makefile-${CONF}.mk ]; \
    	then \
    	    echo ""; \
    	    echo "Error: can not find the makefile for configuration '${CONF}' in project ${PROJECTNAME}"; \
    	    echo "See 'make help' for details."; \
    	    echo "Current directory: " `pwd`; \
    	    echo ""; \
    	fi
    	@if [ ! -f nbproject/Makefile-${CONF}.mk ]; \
    	then \
    	    exit 1; \
    	fi
    
    
    # help
    .help-impl: .help-pre
    	@echo "This makefile supports the following configurations:"
    	@echo "    ${ALLCONFS}"
    	@echo ""
    	@echo "and the following targets:"
    	@echo "    build  (default target)"
    	@echo "    clean"
    	@echo "    clobber"
    	@echo "    all"
    	@echo "    help"
    	@echo ""
    	@echo "Makefile Usage:"
    	@echo "    make [CONF=<CONFIGURATION>] [SUB=no] build"
    	@echo "    make [CONF=<CONFIGURATION>] [SUB=no] clean"
    	@echo "    make [SUB=no] clobber"
    	@echo "    make [SUB=no] all"
    	@echo "    make help"
    	@echo ""
    	@echo "Target 'build' will build a specific configuration and, unless 'SUB=no',"
    	@echo "    also build subprojects."
    	@echo "Target 'clean' will clean a specific configuration and, unless 'SUB=no',"
    	@echo "    also clean subprojects."
    	@echo "Target 'clobber' will remove all built files from all configurations and,"
    	@echo "    unless 'SUB=no', also from subprojects."
    	@echo "Target 'all' will will build all configurations and, unless 'SUB=no',"
    	@echo "    also build subprojects."
    	@echo "Target 'help' prints this message."
    	@echo ""

        Makefile-Debug.mk 往里添加编译文件和编译链接参数,如果是Release,添加一个Makefile-Release.mk文件,把Debug替换为Release便可。

    #
    # Generated Makefile - do not edit!
    #
    # Edit the Makefile in the project folder instead (../Makefile). Each target
    # has a -pre and a -post target defined where you can add customized code.
    #
    # This makefile implements configuration specific macros and targets.
    
    
    # Environment
    MKDIR=mkdir
    CP=cp
    GREP=grep
    NM=nm
    CCADMIN=CCadmin
    RANLIB=ranlib
    CC=gcc.exe
    CCC=g++.exe
    CXX=g++.exe
    FC=gfortran.exe
    AS=as.exe
    
    # Macros
    CND_PLATFORM=MinGW-Windows
    CND_CONF=Debug
    CND_DISTDIR=dist
    
    # Include project Makefile
    include Makefile
    
    # Object Directory
    OBJECTDIR=build/${CND_CONF}/${CND_PLATFORM}
    
    # Object Files
    OBJECTFILES= \
    	${OBJECTDIR}/src/my_app.o \
    	${OBJECTDIR}/src/my_frame.o
    
    # C Compiler Flags
    CFLAGS=
    
    # CC Compiler Flags
    CXXFLAGS=-D_LARGEFILE_SOURCE=unknown -DwxDEBUG_LEVEL=0 -DWXUSINGDLL -D__WXMSW__ -mthreads -m32 -Wall  -MMD -MP -MF $@.d  
    CPPFLAGS=\
    -IE:/software/Lib/gui/wxWidgets-2.9.2/include \
    -IE:/software/Lib/gui/wxWidgets-2.9.2/win32/release/share/include \
    -Iinclude
    
    # Fortran Compiler Flags
    FFLAGS=
    
    # Assembler Flags
    ASFLAGS=
    
    # Link Libraries and Options
    LDLIBSOPTIONS= \
    -Wl,--subsystem,windows -mwindows \
    -LE:/software/Lib/gui/wxWidgets-2.9.2/win32/release/share  \
    -lwx_mswu_adv-2.9 -lwx_mswu_core-2.9 -lwx_baseu-2.9 \
    build/style.o
    
    
    # Build Targets
    .build-conf: ${BUILD_SUBPROJECTS}
    	"${MAKE}"  -f nbproject/Makefile-Debug.mk dist/Debug/MinGW-Windows/test_wx.exe
    
    dist/Debug/MinGW-Windows/test_wx.exe: ${OBJECTFILES}
    	${MKDIR} -p dist/Debug/MinGW-Windows
    	${LINK.cc} -o ${CND_DISTDIR}/${CND_CONF}/${CND_PLATFORM}/test_wx -Wl,-s ${OBJECTFILES} ${LDLIBSOPTIONS} 
    
    ${OBJECTDIR}/src/my_app.o: src/my_app.cpp 
    	${MKDIR} -p ${OBJECTDIR}/src
    	${RM} $@.d
    	$(COMPILE.cc) -o ${OBJECTDIR}/src/my_app.o src/my_app.cpp
    
    ${OBJECTDIR}/src/my_frame.o: src/my_frame.cpp 
    	${MKDIR} -p ${OBJECTDIR}/src
    	${RM} $@.d
    	$(COMPILE.cc) -o ${OBJECTDIR}/src/my_frame.o src/my_frame.cpp
    
    # Subprojects
    .build-subprojects:
    
    # Clean Targets
    .clean-conf: ${CLEAN_SUBPROJECTS}
    	${RM} -r build/Debug
    	${RM} dist/Debug/MinGW-Windows/test_wx.exe
    
    # Subprojects
    .clean-subprojects:
    
    # Enable dependency checking
    .dep.inc: .depcheck-impl
    
    include .dep.inc

        会Makefile一点道理的会知道往哪里添加编译项。

        参考例子的配置下载链接:

        http://download.csdn.net/download/infoworld/5487427

        

    文章结束给大家分享下程序员的一些笑话语录: 程序员打油诗   
      写字楼里写字间,写字间里程序员;
      程序人员写程序,又拿程序换酒钱。
      酒醒只在网上坐,酒醉还来网下眠;
      酒醉酒醒日复日,网上网下年复年。
      但愿老死电脑间,不愿鞠躬老板前;
      奔驰宝马贵者趣,公交自行程序员。
      别人笑我忒疯癫,我笑自己命太贱;
      不见满街漂亮妹,哪个归得程序员。

    --------------------------------- 原创文章 By
    build和configuration
    ---------------------------------

  • 相关阅读:
    elform 校验
    深入理解ES6系列
    【数据结构&算法】10串基础&KMP算法源码
    【数据结构&算法】13赫夫曼树&赫夫曼编码
    【RTOS】FreeRTOS中的任务堆栈溢出检测机制
    【数据结构&算法】11树基础&二叉树遍历
    【环境】解决linux与windows之间的复制粘贴
    【数据结构&算法】09队列概念&参考源码
    【网络基础】内网IP与外网IP
    【数据结构&算法】12线索二叉树
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3111386.html
Copyright © 2011-2022 走看看