2014-12-07 35 views
0

我真的很想看看LISP的GNU手冊,但我似乎並沒有看到變量系統是如何工作的或者如何解決這個惱人的問題。每次我想爲這門課程編譯一個C++項目時,我都必須引用所提供的Makefile,但這意味着我需要將Makefile複製到每個單個項目中......我真的很想要一種方法來獲得Makefile和cpplint.py文件(我必須滿足的一種樣式檢查器)放在一個目錄中,我可以在任何地方引用,而不必在每個項目文件夾中都有兩個副本。有人請,請幫助我。我可憐的SSD不值得這樣;(如何在多個項目中使用單個生成文件(以及cpplint.py的一個版本)?

我提供了下面的生成文件代碼

have_lint = $(通配符cpplint.py)

上面的線是一個我知道我需要的。更改爲至少能夠將cpplint文件放到一個目錄中,但是如何更改此設置?我嘗試了通配符../ maker_directory/cpplint.py但這不起作用...

# Makefile for use with emacs and emacs's flymake mode 
 
# Copyright (C) [email protected] 
 
# 
 
# From emacs menu select Tools->compile 
 
# To compile one file use the syntax: 
 
#  make SRC=hello.cpp 
 
# The compile many files use the syntax (change my_exe_name below): 
 
#  make many EXE=my_exe_name 
 
# 
 

 
.PHONY: check-syntax all clean style many style-many 
 

 
CXX=icpc 
 
CXXFLAGS=-Wall -g -Wextra -std=c++11 
 
LIBS= 
 
DEF_LIBS=-lm -lpthread 
 

 
# Target exectuable name if SRC is defined 
 
ifdef SRC 
 
OBJ=$(patsubst %.cpp, %.o, $(SRC)) 
 
EXE=$(patsubst %.cpp, %, $(SRC)) 
 
endif 
 

 
# Variables to conditionally download cpplint.py 
 
have_lint=$(wildcard cpplint.py) 
 
ifneq ('$(have_lint)', 'cpplint.py') 
 
WGET=get-lint 
 
endif 
 

 
all: build style 
 

 
build: $(SRC) 
 
ifeq (,$(findstring .h, $(SRC))) 
 
\t $(CXX) $(CXXFLAGS) $(SRC) -o $(EXE) $(LIBS) $(DEF_LIBS) 
 
endif 
 

 
compile: $(SRC) 
 
ifeq (,$(findstring .h, $(SRC))) 
 
\t $(CXX) -c $(CXXFLAGS) $(SRC) -o $(OBJ) $(LIBS) $(DEF_LIBS) 
 
endif 
 

 
check-syntax: 
 
\t $(CXX) $(CXXFLAGS) -fsyntax-only $(CHK_SOURCES) 
 

 
style: $(WGET) 
 
\t ./cpplint.py $(SRC) 
 

 
get-lint: 
 
\t wget -q http://pc2lab.cec.miamiOH.edu/documents/cpplint.py 
 
\t chmod +x cpplint.py 
 

 
many: compile-many style-many 
 

 
compile-many: 
 
ifndef EXE 
 
\t @echo Specify target executable name via command-line EXE=your_exe_name 
 
\t @exit 2 
 
endif 
 
\t $(CXX) $(CXXFLAGS) *.cpp -o $(EXE) $(LIBS) $(DEF_LIBS) 
 

 
style-many: $(WGET) 
 
\t $(eval SRCS:=$(wildcard *.h *.cpp)) 
 
\t ./cpplint.py $(SRCS) || echo done

+1

我可能在這裏錯過了一些東西,但這與Lisp有什麼關係?我看到一堆關於Makefiles的內容,還有一些關於python的內容,但Lisp是如何介入的?標題似乎並不涉及這個問題;這使得這個問題不清楚...... – 2014-12-07 13:00:08

+0

在Linux Makefiles使用Lisp編碼。順便謝謝你的回答。 – patrickjp93 2015-05-15 02:11:44

+0

在這裏,我錯過了lisp的另一個含義嗎?你顯示的makefile不是用lisp寫的... – 2015-05-15 11:09:33

回答

1

您可以添加一個makefile變量保存在Python的cpplint.py存儲 也把完整的文件路徑在一個變量的目錄:

lint_dir=$(HOME)/code/cpp/CppLint 
cpplint=$(lint_dir)/cpplint.py 

則該目錄添加前綴地方使用cpplint.py也是它的下載:

# Variables to conditionally download cpplint.py 
have_lint=$(wildcard $(cpplint)) 
ifneq ('$(have_lint)', '$(cpplint)') 
WGET=get-lint 
endif 

style: $(WGET) 
    $(cpplint) $(SRC) 

get-lint: 
    wget -q --directory-prefix=$(lint_dir) http://pc2lab.cec.miamiOH.edu/documents/cpplint.py 
    chmod +x $(cpplint) 

style-many: $(WGET) 
    $(eval SRCS:=$(wildcard *.h *.cpp)) 
    $(cpplint) $(SRCS) || echo done 

您可以使用-f選項在不同的目錄使用的Makefile

make -f ${makefile-directory}/my_makefile ... 
相關問題