avatar
请教一个makefile 小问题# Programming - 葵花宝典
X*4
1
【 以下文字转载自 Biology 讨论区 】
发信人: Xiaokeai154 (蔡一灵), 信区: Biology
标 题: 请问新泽西癌症研究所的Hu wenwei这个导师怎么样?
发信站: BBS 未名空间站 (Sun Jul 8 22:56:15 2012, 美东)
国内博士刚毕业,正申请博士后位置,问问大家这个教授的情况。谢谢各位大侠
The research interest of our lab is to study the
novel targets and functions of tumor
suppressor
p53 in tumor suppression and aging (Cell 2004,
119:591; Nature 2007,450:721; PNAS 2007,104:
16633;
Molecular Cell 2010,38:689; PNAS 2010,107:7455
;
PNAS 2011, 108:16295; PNAS 2012, 109:7013). A
postdoc position is available. Candidate
should
have a recent Ph.D. degree and solid
background
and skills in cancer molecular and cellular
biology; be able to work independently and
collaborate with other team members. Highly
motivated individuals with a consistent
publication record in cancer research are
encouraged to apply. Salary will be
commensurate
with experience. Cancer Institute of New
Jersey
(CINJ) is a NCI designated comprehensive
cancer
center and is located in the big Princeton
area in
New Jersey. CINJ is affiliated with the Robert
Wood Johnson Medical School of UMDNJ, which
will
be affiliated with Rutgers University (the
State
University of New Jersey) starting in 2013.
Applicants should send CV and names of three
references by email to: Wenwei Hu, Cancer
Institute of New Jersey, New Brunswick, NJ
08903.
E-mail: h**[email protected]
avatar
l*n
2
今天在领馆的网站上看见有两个地点可以选,都不是Toronto...请问哪一个比较方便。
我应该会住在downtown TORONTO附近。
还有最近老在坛子里看见说等超过四天才拿到签证的,真的要这么久嘛?我上次在加拿
大签是两天就拿到的。不过那是两年以前了。
avatar
j*5
3
最近几年来,中国电视剧的制作,在某些道具环节处理的非常细腻。比较有代表性
的,《甄嬛抓》里边,每天侍寝,太监给皇帝送过来牌子,让皇帝翻一下,然后获选的
妃子就开心一整天,落选的就臣妾不高兴。那托盘里边的牌子,还真能在故宫收藏里边
看到,都是按着一比一的样子做的。
再说《白鹿原》这部电视剧,里边上来就是白嘉轩家吃面条,陕西叫臊子面。因为
道具组的给力,活生生把《白鹿原》前集拍成了舌尖上的黄土高坡。最近正在热播的这
部《三国机密》在道具上,也狠下了一番功夫,值得注意的,是男主角马天宇和女主角
万茜,在剧中有一段对手戏,涉及到了东汉末年如何点灯拔蜡。
男主角的帝王哥哥死掉,万茜饰演的伏寿在安排好一个“狸猫换皇帝”的游戏之后
,云淡风轻,继而,有了这段熄灭灯烛的戏。在这段戏之前,则是死掉的皇帝尸体被放
入火中,试图呈现一种烧焦的状态,从而无从查证,让皇帝尸体能够伪装成一个小太监
,欺骗过曹操。媳妇烧掉丈夫尸体,这个伏寿内心一定是挣扎的。
而如何展现她强大的内心世界呢?我们必须知道东汉末年灯烛里边靠什么做燃料,
才能真正明白这段戏的道具精彩之处。有时候,电视剧好玩就好玩在了,影迷可以跟电
视剧拍摄的道具组逗智商,他们撅什么屁股,就知道他们拉什么那啥。
先来看第一个问题,中国什么时候开始有了灯。笼统意义上的灯,当然可以作为火
把来看待,直接把火把裹上可燃烧物质,拆在地上就是灯了。要是这么搞,中国人最早
使用灯的历史可以追述到原始人社会。这个追,没意义。
有文字记载的灯具,出现在商朝。当时青铜器制造已经初见矛头,开始有一些甲骨
文记载室内照明的问题。但一直没有实物出土。考古学有两个要求,第一个,文字记载
,第二个,实物出土。两个要相互印证,才能作为石锤记录。
真正意义上的灯具出土,是战国时期。这个时期,出土的范围已经很广阔了。北到
北京这一代,南边一直到湖北,东边一直到山东海边,西边一直到陕西出关,这个范围
内的墓地都出土了灯具。而战国的书籍里边也开始大规模记录点灯照明的事儿,有的还
把点灯上升到了人生哲学的高度。我这篇是电视剧科普小常识文章,不是考据癖,因此
,不做援引。对这个小知识点感兴趣的,欢迎关注并私信获取。
战国时期出土的那些灯具,一般都是人俑形状的,后续还出现了漫天飞树杈子形状
的。电视剧《三国机密》里边出现的那个万茜熄灯的道具,实际上是按着中山国出土的
灯具文物做的。为什么对这个灯具形状那么熟悉呢?因为,这个树杈子灯,我刚在河北
省博物馆见过。说这些,倒不是吹河北石家庄地界上的中山国多地大物博,相反,战国
时期的中山国,是个特别小家子气的国。
中山国处于燕赵等大国之间,实力特别差,还老觉得自己挺牛,没事儿就找赵国那
边扎刺。竟然也赢了一些小战斗。而中山国的性格就是,地痞小流氓式的,大金链子小
金表,没事儿就喜欢穿上小貂装个蒜。中山国的上层建筑们也就生活的非常奢侈,这种
树杈子式的灯具,就出土在中山国陵墓里边。后来,中山国整天咋呼,终于被周边的大
哥给爆头了。
等到了两汉时期,灯具没有太多发展。中山国出土的这种较为奢侈的树杈子灯具在
宫廷里边开始兴盛起来。当然,这种树钗子灯具在历史学术上,有自己正规的名字,我
觉得不如叫树杈子灯具形象。为什么说这种树杈子灯具奢侈呢?
因为它耗费的燃料多。东汉末年,这种灯具里边到底都用的什么燃料呢?这一时期
,从湖北的墓穴里边出土过灯具,应该是八十年代的时候,科学家们去分析灯具残余的
成分发现,里边主要是牛的脂肪。因此,我们基本可以断定,在东汉末年的灯具里边,
燃烧的,应该是大家经常见到的动物类的脂肪油。
关于古代灯具烧什么,文字记载不多。中国古代历史的毛病就是老围绕皇帝那点破
事儿转悠,丝毫不关心百姓的衣食住行用。《史记·秦始皇本纪》里边倒是写了一点,
说秦始皇下葬的时候,烧的是鱼油,非常神奇,这灯烧了很长时间也不灭。陕西的秦始
皇陵墓至今也没打开,无从验证。
不过,这些文字资料与出土实物可以相互佐证,至少在东汉末年,灯具里边还是以
烧动物油脂为主的。咱们简短捷说,等到了宋元时期,就开始有石油了,拿煤油点灯的
事儿开始兴起。但也并不普遍。为什么这么说呢?我小时候家里穷,没有电灯,还点过
一段时间的煤油灯。当时煤油灯也不敢点的太奢侈,只是读书才点。我们那代人,学点
知识不容易啊。
知道东汉末年点动物油的灯,就能理解万茜饰演的角色熄灯时候丰富的心理活动了
。这种动物油脂的灯具,燃烧之后实际上是一股子烤肉味儿。等于说,万茜饰演的伏寿
熄灯的时候,要闻着浓烈的烧焦的肉味儿。在前面的剧情中,伏寿她老爷们刚用火烧焦
了,满皇城的烤人肉味道。这会儿去熄灯,再次闻到烧肉的焦糊味道,“臣妾心里苦”
,臣妾只能熄灯了。
电视剧能做到这样的互文,还是非常有趣的。倒是读书好,不能光看二人转。
avatar
c*y
4
在mingw下的make,修改文件后,不管是h还是cpp文件,make都不重新编译啊。
试了加了dependency,还试了下载了makedepend,都不行。
每次改一点点,都得make clean & make, 太费时了。
经验不足,见笑。是不是mingw就不支持。
btw,是cmd下直接用make的,不是在cygwin下的bash里面用的。不得已,用这样的环境
avatar
p*o
5
一直在用,没这个问题,你检查时间戳看看。

【在 c*******y 的大作中提到】
: 在mingw下的make,修改文件后,不管是h还是cpp文件,make都不重新编译啊。
: 试了加了dependency,还试了下载了makedepend,都不行。
: 每次改一点点,都得make clean & make, 太费时了。
: 经验不足,见笑。是不是mingw就不支持。
: btw,是cmd下直接用make的,不是在cygwin下的bash里面用的。不得已,用这样的环境
: 。

avatar
c*y
6
也许我makefile写的不对,不过我是从sample修改过来的。上stackoverflow搜了一下。
CXX=g++
CXXFLAGS=-DIB_USE_STD_STRING -w -Wno-switch -Wno-sign-compare
ROOT_DIR=c:/Jts/TWSAPI/source
BASE_SRC_DIR=${ROOT_DIR}/PosixClient/src
INCLUDES=-I${ROOT_DIR}/CppClient/Shared -I${BASE_SRC_DIR}
TARGET=eu.exe
$(TARGET):
$(CXX) $(CXXFLAGS) $(INCLUDES) -o EClientSocketBase.o -c $(BASE_SRC_DIR)
/EClientSocketBase.cpp
$(CXX) $(CXXFLAGS) $(INCLUDES) -o EPosixClientSocket.o -c $(BASE_SRC_DIR
)/EPosixClientSocket.cpp
$(CXX) $(CXXFLAGS) $(INCLUDES) -o PosixTestClient.o -c PosixTestClient.
cpp
$(CXX) $(CXXFLAGS) $(INCLUDES) -o Main.o -c Main.cpp
$(CXX) $(CXXFLAGS) -o [email protected] EClientSocketBase.o EPosixClientSocket.o
PosixTestClient.o Main.o -lws2_32
clean:
rm -f $(TARGET) PosixTestClient.o Main.o
对make 不熟悉,touch 修改的文件都没用。

【在 p***o 的大作中提到】
: 一直在用,没这个问题,你检查时间戳看看。
avatar
p*o
7
你这个明摆就是每次都全部重新编译而不是不重新编译。

下。
DIR)

【在 c*******y 的大作中提到】
: 也许我makefile写的不对,不过我是从sample修改过来的。上stackoverflow搜了一下。
: CXX=g++
: CXXFLAGS=-DIB_USE_STD_STRING -w -Wno-switch -Wno-sign-compare
: ROOT_DIR=c:/Jts/TWSAPI/source
: BASE_SRC_DIR=${ROOT_DIR}/PosixClient/src
: INCLUDES=-I${ROOT_DIR}/CppClient/Shared -I${BASE_SRC_DIR}
: TARGET=eu.exe
: $(TARGET):
: $(CXX) $(CXXFLAGS) $(INCLUDES) -o EClientSocketBase.o -c $(BASE_SRC_DIR)
: /EClientSocketBase.cpp

avatar
c*y
8
是的,我刚把上面的去掉了,
可还是修改文件以后, make都是 is up to date.

【在 p***o 的大作中提到】
: 你这个明摆就是每次都全部重新编译而不是不重新编译。
:
: 下。
: DIR)

avatar
b*s
9
你改了哪个文件?我感觉你是弄错了什么东西,比如改了一个文件名和你的makefile里
面文件名不一样的文件,建议你仔细比对一下,看看有没有typo
另外,touch在遇到有ccache之类工具时是不起作用的,不过你好像没有用,不过如果
整个环境不是你自己搭的话,检查下你的g++是不是真的g++,还是被人改成了一个link
,其实调用了ccache之类

【在 c*******y 的大作中提到】
: 是的,我刚把上面的去掉了,
: 可还是修改文件以后, make都是 is up to date.

avatar
d*a
10
这样说不清楚。你得把修改后的文件贴一下。

【在 c*******y 的大作中提到】
: 是的,我刚把上面的去掉了,
: 可还是修改文件以后, make都是 is up to date.

avatar
p*o
11
啥叫把上面的去掉了?去掉了就什么都没有了,你让make去make啥?

【在 c*******y 的大作中提到】
: 是的,我刚把上面的去掉了,
: 可还是修改文件以后, make都是 is up to date.

avatar
c*y
12
c:Tradingeu-ats>g++ --version
g++ (GCC) 4.8.0
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
makefile:
CXX=g++
CXXFLAGS=-DIB_USE_STD_STRING -w -Wno-switch -Wno-sign-compare -O2
ROOT_DIR=c:/Jts/TWSAPI/source
BASE_SRC_DIR=${ROOT_DIR}/PosixClient/src
INCLUDES=-I${ROOT_DIR}/CppClient/Shared -I${BASE_SRC_DIR}
TARGET=fx.exe
$(TARGET):
$(CXX) $(CXXFLAGS) $(INCLUDES) -o PosixTestClient.o -c PosixTestClient.
cpp
$(CXX) $(CXXFLAGS) $(INCLUDES) -o Main.o -c Main.cpp
$(CXX) $(CXXFLAGS) -o [email protected] lib/EClientSocketBase.o lib/EPosixClientSocket.
o PosixTestClient.o Main.o -lws2_32
clean:
rm -f $(TARGET) PosixTestClient.o Main.o
就是把那两个很少修改的库,放到子目录lib,每次少编译两个文件,
每次make clean & make 没问题,但是修改Main.cpp PosixTestClient.cpp再
make,没反应。

link

【在 b*******s 的大作中提到】
: 你改了哪个文件?我感觉你是弄错了什么东西,比如改了一个文件名和你的makefile里
: 面文件名不一样的文件,建议你仔细比对一下,看看有没有typo
: 另外,touch在遇到有ccache之类工具时是不起作用的,不过你好像没有用,不过如果
: 整个环境不是你自己搭的话,检查下你的g++是不是真的g++,还是被人改成了一个link
: ,其实调用了ccache之类

avatar
d*a
13
$(TARGET):
$(CXX) $(CXXFLAGS) $(INCLUDES) -o PosixTestClient.o -c PosixTestClient.
cpp
...
你这样写,是说只要$(TARGET)已经有了,就什么都不用做了。
make clean & make先把$(TARGET)删了,所以能work。
avatar
c*y
14
请教一下怎么写呢? 我是从sample改过来的。

【在 d***a 的大作中提到】
: $(TARGET):
: $(CXX) $(CXXFLAGS) $(INCLUDES) -o PosixTestClient.o -c PosixTestClient.
: cpp
: ...
: 你这样写,是说只要$(TARGET)已经有了,就什么都不用做了。
: make clean & make先把$(TARGET)删了,所以能work。

avatar
d*a
15

你用的sample看起来不适合你想用的情况。试试以下面这个sample为模板。
http://www.gnu.org/software/make/manual/make.html#Prerequisite-
OBJDIR := objdir
OBJS := $(addprefix $(OBJDIR)/,foo.o bar.o baz.o)

$(OBJDIR)/%.o : %.c
$(COMPILE.c) $(OUTPUT_OPTION) $<

all: $(OBJS)
这里OBJDIR相当于你文件中的BASE_SRC_DIR,all是$(TARGET),再用你的文件清单替换
OBJS定义中的文件清单。

【在 c*******y 的大作中提到】
: 请教一下怎么写呢? 我是从sample改过来的。
avatar
c*y
16
非常感谢,这种socket程序debug起来需要无数次的重新编译,才知道
是不是自己想要的结果。节省了我很多时间,
这个是个官方的sample,我以为不会这么弱。
一个package,我改写了很多code,makefile一直没好好理解,
每次浪费十秒,一天能浪费很多分钟。

【在 d***a 的大作中提到】
:
: 你用的sample看起来不适合你想用的情况。试试以下面这个sample为模板。
: http://www.gnu.org/software/make/manual/make.html#Prerequisite-
: OBJDIR := objdir
: OBJS := $(addprefix $(OBJDIR)/,foo.o bar.o baz.o)
:
: $(OBJDIR)/%.o : %.c
: $(COMPILE.c) $(OUTPUT_OPTION) $<
:
: all: $(OBJS)

avatar
S*A
17
问题关键是你根本没有指定 TARGET 到源文件的
依赖关系。没有依赖关系,只要 TARGET 存在就是
最新的了。
你要在后面加类似这么一个就好了:
$(TARGET): $(wildcard *.c *.h)
我注意到你有子目录,我的 wildcard 没有包括子目录。
你直接手动把子目录的源程序手动展取代了 wildcard 就好了。
最根本的问题是你完全没有制定文件的依赖关系。
这样就把 makefile 当成 bash 来用了。

【在 c*******y 的大作中提到】
: 请教一下怎么写呢? 我是从sample改过来的。
avatar
d*a
18
没关系。调makefle有可能很花时间。做好了后用起来还是很舒服的。
上面中间一句得改在这样:
$(BASE_SRC_DIR)/%.o : $(BASE_SRC_DIR)/%.c

【在 c*******y 的大作中提到】
: 非常感谢,这种socket程序debug起来需要无数次的重新编译,才知道
: 是不是自己想要的结果。节省了我很多时间,
: 这个是个官方的sample,我以为不会这么弱。
: 一个package,我改写了很多code,makefile一直没好好理解,
: 每次浪费十秒,一天能浪费很多分钟。

avatar
b*s
19
嗯,就是这样

【在 S*A 的大作中提到】
: 问题关键是你根本没有指定 TARGET 到源文件的
: 依赖关系。没有依赖关系,只要 TARGET 存在就是
: 最新的了。
: 你要在后面加类似这么一个就好了:
: $(TARGET): $(wildcard *.c *.h)
: 我注意到你有子目录,我的 wildcard 没有包括子目录。
: 你直接手动把子目录的源程序手动展取代了 wildcard 就好了。
: 最根本的问题是你完全没有制定文件的依赖关系。
: 这样就把 makefile 当成 bash 来用了。

avatar
S*A
20
你这个 $(COMPILE.c) $(OUTPUT_OPTION) 都要自己定义吧,
都不像是 gmake 预先定义的宏。

【在 d***a 的大作中提到】
: 没关系。调makefle有可能很花时间。做好了后用起来还是很舒服的。
: 上面中间一句得改在这样:
: $(BASE_SRC_DIR)/%.o : $(BASE_SRC_DIR)/%.c

avatar
D*r
21
同意这个,
你target后面的一堆命令,只是一条条执行而已,根本没有检查依赖关系,必须先把依
赖关系建立起来,target依赖一堆子target或者文件,文件变了,相应的有依赖关系的
命令才会执行。

【在 S*A 的大作中提到】
: 问题关键是你根本没有指定 TARGET 到源文件的
: 依赖关系。没有依赖关系,只要 TARGET 存在就是
: 最新的了。
: 你要在后面加类似这么一个就好了:
: $(TARGET): $(wildcard *.c *.h)
: 我注意到你有子目录,我的 wildcard 没有包括子目录。
: 你直接手动把子目录的源程序手动展取代了 wildcard 就好了。
: 最根本的问题是你完全没有制定文件的依赖关系。
: 这样就把 makefile 当成 bash 来用了。

avatar
c*y
22
谢谢大家,平时没注意这些“小”问题,都是改模板,没好好理解。现在可以了,还是
怪自己做事不够细致。
avatar
S*A
23
我改了一下, 这样子应该是比较接近的了吧。而且中间节点
都用隐含规则建立依赖关系了。完全没有测试,因为我不用
cygwin
==================================
CXX=g++
BASE_SRC_DIR=CppClient/Shared
INCLUDES=-I$(BASE_SRC_DIR) -I.
CXXFLAGS=-DIB_USE_STD_STRING -w -Wno-switch -Wno-sign-compare $(INCLUDES)
LIBS = -lws2_32
TARGET=eu.exe
OBJS= $(addprefix $(BASE_SRC_DIR), EClientSocketBase.o EPosixClientSocket.o)
\
PosixTestClient.o Main.o
$(TARGET): $(OBJS)
$(CXX) $(CXXFLAGS) -o [email protected] $< $(LIBS)
clean:
rm -f $(TARGET) $(OBJS)
avatar
S*A
24

同一目录底下 .o.c 的隐含规则已经包括这个了。
如果你用隐含规则其实不需要指定这个依赖关系的。
原文用 cpp, .o.c 也不是很对。

【在 d***a 的大作中提到】
: 没关系。调makefle有可能很花时间。做好了后用起来还是很舒服的。
: 上面中间一句得改在这样:
: $(BASE_SRC_DIR)/%.o : $(BASE_SRC_DIR)/%.c

avatar
t*t
25
implicit rules has CPPFLAGS which is for c pre processor. INCLUDES should be
in CPPFLAGS. it is shared for both CXX and CC rules.

【在 S*A 的大作中提到】
: 我改了一下, 这样子应该是比较接近的了吧。而且中间节点
: 都用隐含规则建立依赖关系了。完全没有测试,因为我不用
: cygwin
: ==================================
: CXX=g++
: BASE_SRC_DIR=CppClient/Shared
: INCLUDES=-I$(BASE_SRC_DIR) -I.
: CXXFLAGS=-DIB_USE_STD_STRING -w -Wno-switch -Wno-sign-compare $(INCLUDES)
: LIBS = -lws2_32
: TARGET=eu.exe

avatar
S*A
26
Sure, that is even better.

be

【在 t****t 的大作中提到】
: implicit rules has CPPFLAGS which is for c pre processor. INCLUDES should be
: in CPPFLAGS. it is shared for both CXX and CC rules.

avatar
d*i
27
向这里几位大侠致敬,我都是只会改别人写好的Makefile.
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。