我正在做一个快速增长的项目,保持目标文件的日期是没有选择的.wildcard命令之外的问题介于"我不想要递归的makefile"和"我不希望它手动列出"之间.这些对象应该进入一个单独的目录,该目录已经可以使用.注:我不是说用的makefile,我知道的基本知识,但一切都超出了......
所以我的问题是: 如何以递归方式扫描src文件夹并以智能方式执行此操作?
我已经用多个SRC变量做了这个但是这很难看,并且整个makefile与越来越多的目录混乱.
我目前使用的是:
OS = Linux
VERSION = 0.0.1
CC = /usr/bin/gcc
CFLAGS = -Wall -g -D_REENTRANT -DVERSION=\"$(VERSION)\"
LDFLAGS = -lm `pkg-config --cflags gtk+-2.0` `pkg-config --libs gtk+-2.0`
BUILDDIR = build
SOURCEDIR = src
HEADERDIR = src
SOURCES = $(wildcard $(SOURCEDIR)/*.c)
OBJECTS = $(patsubst $(SOURCEDIR)/%.c, $(BUILDDIR)/%.o, $(SOURCES))
NAME = cinnamon
BINARY = cinnamon.bin
ECHO = echo
RM = rm -rf
MKDIR = mkdir
INSTALL = install
.PHONY: all clean setup
all: $(BINARY)
$(BINARY): $(BUILDDIR)/$(OBJECTS)
$(CC) $(CFLAGS) $(LDFLAGS) …Run Code Online (Sandbox Code Playgroud) 我有一个目录images/,我想build/images/从Makefile中复制到.该目录可能包含多个级别的子目录.最优雅的方式是什么?我想要:
make运行时都有完整的目录副本(即没有cp -r)images/应自动更新build/images/)make,所以没有rsync或cp -u如果可能的话我正在使用GNU make,因此允许GNU特定的东西.
我试图将整个目录从html转换为markdown.目录树非常高,因此有两个和三个级别的文件嵌套.
在回答这个问题时,John MacFarlane建议使用以下内容Makefile:
TXTDIR=sources
HTMLS=$(wildcard *.html)
MDS=$(patsubst %.html,$(TXTDIR)/%.markdown, $(HTMLS))
.PHONY : all
all : $(MDS)
$(TXTDIR) :
mkdir $(TXTDIR)
$(TXTDIR)/%.markdown : %.html $(TXTDIR)
pandoc -f html -t markdown -s $< -o $@
Run Code Online (Sandbox Code Playgroud)
现在,这似乎没有进入子目录.有没有简单的方法来修改它,以便它将处理整个树?
我不需要这个make.我正在寻找的是一种获取初始目录的镜像的方法,其中每个html文件被pandoc该文件上运行的输出所取代.
(我怀疑这些方面的某些内容应该会有所帮助,但是如果我试图自己解决这个问题,我就不会有信心我不会破坏它.我说的是文盲GNU make.)
我使用Android NDK来构建我的cocos2dx项目,在Android.mk中,有一个LOCAL_SRC_FILES的定义,其中列出了每个cpp文件.每当我添加一个新的源文件时,我都需要在那里添加它...它看起来像这样:
LOCAL_SRC_FILES := hellocpp/main.cpp \
hellocpp/myclass.cpp \
hellocpp/mynextclass.cpp \
../../Classes/Screens/LaunchScreen.cpp \
Run Code Online (Sandbox Code Playgroud)
但是,头文件可以指定要包含的整个目录,它看起来像这样:
LOCAL_C_INCLUDES := $(LOCAL_PATH)/hellocpp
LOCAL_C_INCLUDES += $(LOCAL_PATH)/../../Classes/Screens
Run Code Online (Sandbox Code Playgroud)
我已经尝试了各种方法来包含整个目录而不是单个文件,LOCAL_SRC_FILES这样每当我添加新文件时我都不需要修改Android.mk构建脚本,但到目前为止,我的所有尝试都失败了.
我试过这个:
#SRC_PATH_HELLOCPP := $(wildcard hellocpp/*.cpp)
#SRC_PATH_CLASSES += $(wildcard ../../Classes/*.cpp)
#LOCAL_SRC_FILES := $(SRC_PATH_HELLOCPP:$(LOCAL_PATH/%=%)
#LOCAL_SRC_FILES += $(SRC_PATH_CLASSES:$(LOCAL_PATH/%=%)
Run Code Online (Sandbox Code Playgroud)
以及:
#LOCAL_SRC_FILES += hellocpp/*.cpp
#LOCAL_SRC_FILES += ../../Classes/*.cpp
Run Code Online (Sandbox Code Playgroud)
两个都不工作......
我有另一个项目与第一个选项很好,我真的不明白为什么它在cocos2dx项目中不起作用...有人知道为什么或知道解决方案吗?或者也许我应该保持原样并且麻烦,因为每个人都这样做.但是这真的很麻烦,希望有人可以提供帮助,这样我们所有人都可以更有成效.
谢谢!
为了编译两个文件,我创建了一个makefile,在其中我用来提及对象名称,或者可以使用patsubst使用模式规则。
# ----------------------------------------------------------------------------
# Makefile for building tapp
#
# Copyright 2010 FriendlyARM (http://www.arm9.net/)
#
ifndef DESTDIR
DESTDIR ?= /opt/FriendlyARM/tiny6410/linux/rootfs_qtopia_qt4
endif
#CFLAGS = -c -Wall -O2 # wall is for warning show and 02 is optiminisation level 2
CFLAGS = -c -O2 # wall is for warning show and 02 is optiminisation level 2
#CC = arm-linux-gcc # compiler name
CC = gcc # compiler name
LD = ld
INSTALL = install #
TARGET = led_player_project
#OBJ = led-player_backup.o led-player.o …Run Code Online (Sandbox Code Playgroud)