小编Chr*_*son的帖子

如何从另一个Makefile调用Makefile?

我收到一些意外的结果从另一个调用一个makefile.我有两个makefile,一个叫/path/to/project/makefile,一个叫/path/to/project/gtest-1.4.0/make/Makefile.我试图让前者称之为后者.在/ path/to/project/makefile中,我有

dev: $(OBJ_FILES)
  $(CPPC) $(LIBS) $(FLAGS_DEV) $(OBJ_FILES) -o $(BIN_DIR)/$(PROJECT)
  $(MAKE) -f ./gtest-1.4.0/make/Makefile

clean:
  rm -f ./*~ ./gmon.out ./core $(SRC_DIR)/*~ $(OBJ_DIR)/*.o
  rm -f ../svn-commit.tmp~
  rm -f $(BIN_DIR)/$(PROJECT)
  make -f gtest-1.4.0/make/Makefile clean
Run Code Online (Sandbox Code Playgroud)

/path/to/project/gtest-1.4.0/make/Makefile我有

all: $(TESTS)

clean:
  rm -f $(TESTS) gtest.a gtest_main.a *.o
Run Code Online (Sandbox Code Playgroud)

发布以下内容:

cd /path/to/project
make
Run Code Online (Sandbox Code Playgroud)

输出:

make -f ./gtest-1.4.0/make/Makefile
make[1]: Entering directory `/path/to/project'
make[1]: Nothing to be done for `all'.
make[1]: Leaving directory `/path/to/project'
Run Code Online (Sandbox Code Playgroud)

但是,当我发出这些命令时:

cd /path/to/project
make clean
Run Code Online (Sandbox Code Playgroud)

我知道了:

make -f gtest-1.4.0/make/Makefile clean …
Run Code Online (Sandbox Code Playgroud)

makefile gnu-make

111
推荐指数
3
解决办法
13万
查看次数

我需要我的sed -i命令进行就地编辑才能使用GNU sed和BSD/OSX sed

我有一个makefile(在Linux上为gmake开发),我试图移植到OSX,但似乎sed不想合作.我所做的是使用GCC自动生成依赖文件,然后使用sed稍微调整一下.makefile的相关部分:

$(OBJ_DIR)/%.d: $(SRC_DIR)/%.cpp
  $(CPPC) -MM -MD $< -o $@
  sed -i 's|\(.*\)\.o:|$(OBJ_DIR)/\1.o $(OBJ_DIR)/\1.d $(TEST_OBJ_DIR)/\1_utest.o:|' $@
Run Code Online (Sandbox Code Playgroud)

虽然这在GNU/Linux下没有遇到麻烦,但在尝试构建OSX时会出现如下错误:

sed: 1: "test/obj/equipmentConta ...": undefined label 'est/obj/equipmentContainer_utest.d'
sed: 1: "test/obj/dice_utest.d": undefined label 'est/obj/dice_utest.d'
sed: 1: "test/obj/color-string_u ...": undefined label 'est/obj/color-string_utest.d'
Run Code Online (Sandbox Code Playgroud)

看起来sed正在砍掉一个角色,但我看不到解决方案.

macos gnu sed inplace-editing

59
推荐指数
6
解决办法
4万
查看次数

Jinja模板是否有惯用的文件扩展名?

我需要以编程方式区分Jinja模板文件,其他模板文件(如ERB)和无模板纯文本文件.

根据Jinja文件:

Jinja模板不需要具有特定的扩展名:.html,.xml或任何其他扩展名就可以了.

但是当需要显式扩展时我应该使用什么?.py是误导性的,包括"jinja"和"extension"在内的任何搜索都被关于Jinja Extensions的讨论严厉搜索.

我可以轻松地规定一个项目范围的惯例(.jnj或者.ja想到),但这是开源的,所以如果已经在某处建立了实践,我不想逆势而行.


编辑1:同样,我理解Jinja项目 - 有目的地 - 没有定义默认文件扩展名.我问的是,是否有任何非官方的惯例出现在某些项目特定原因所需的情况下.


编辑2:澄清:这不适用于HTML内容.

python file-extension templates jinja2

51
推荐指数
6
解决办法
2万
查看次数

STL priority_queue的效率

我有一个应用程序(C++),我认为STL将很好地服务priority_queue. 文件说:

Priority_queue是一个容器适配器,这意味着它是在一些底层容器类型之上实现的.默认情况下,底层类型是vector,但可以显式选择其他类型.

优先级队列是标准概念,可以通过多种不同方式实现; 这个实现使用堆.

我以前认为top()O(1),那push()将是一个O(logn)(我首先选择的两个原因priority_queue) - 但文档既没有证实也没有否定这个假设.

深入挖掘,序列概念的文档说:

单元素插入和擦除的复杂性依赖于序列.

priority_queue使用vector作为堆,其(默认):

...支持随机访问元素,在末尾插入和删除元素,以及在开头或中间插入和删除元素的线性时间.

我推断,使用默认的priority_queue,top()O(1)push()O(n).

问题1:这是正确的吗?(top()访问是O(1)push()O(n)?)

问题2:如果我使用(或)而不是a 来实现,我是否能够实现O(logn)效率?这样做的后果是什么?其他什么操作会受到影响?push()setmultisetvectorpriority_queue

NB:我担心时间效率,而不是空间.

c++ performance stl priority-queue data-structures

35
推荐指数
3
解决办法
3万
查看次数

如何动态生成和运行本机代码?

我想为我编写的玩具语言处理器编写一个非常小的概念验证JIT编译器(纯粹是学术性的),但我在设计的中间高度上遇到了一些麻烦.从概念上讲,我熟悉JIT的工作原理 - 您将字节码编译成(机器或汇编?)代码来运行.然而,在螺栓和螺栓水平上,我并不是在你实际上是怎么做的.

我的(非常"新手")下意识的反应,因为我没有第一个线索从哪里开始,将尝试类似以下内容:

  1. mmap()一块内存,设置对PROT_EXEC的访问
  2. 将本机代码写入块中
  3. 存储当前寄存器(堆栈指针,等等)
  4. 修改当前寄存器以指向映射区域中的本机代码块
  5. 现在,本机代码将由机器执行
  6. 恢复以前的寄存器

这甚至接近正确的算法吗?我已经尝试过阅读我知道有JIT编译器学习的不同项目(比如V8),但是由于它们的大小,这些代码库很难被消费,而我几乎不知道从哪里开始寻找.

c++ linux compiler-construction x86 jit

32
推荐指数
2
解决办法
9871
查看次数

GCC中strlen()的实现在哪里?

有人能指出我strlen()在海湾合作委员会的定义吗?我现在大约半小时一直在试用版本4.4.2(当谷歌疯狂时),我似乎无法找到strlen()实际实现的位置.

c glibc strlen

19
推荐指数
5
解决办法
5万
查看次数

命令模式似乎不必要复杂(我不明白的是什么?)

我已经阅读了命令模式,我想我错过了一些东西.Command对象的存在是为了抽象出Receiver对象的细节.在我看来,我们可以简单地停在这里,并保持对Command对象的引用,以在适当的时间执行适当的方法.

那么,为什么需要Invoker呢?这种额外的间接提供了什么优势?我们已经隐藏了命令后面的接收器的细节,那么命令随后被客户端隐藏的动机是什么?

abstraction information-hiding design-patterns command-pattern

13
推荐指数
2
解决办法
1396
查看次数

`git push --force`的其他后果?

关于强迫a的问题和答案git push不难发现(这里两个).标准答案是这样的:

如果你有强制git push,在技术上你可以使用的--force选项,但在程序上,你不应该因为有人可能已经拉到某处一只小猫会死.

我认为这通常是圣人的建议 - 更安全的路线是再次提交,修复你所破坏的任何东西.但是,让我们说,例如我知道(神奇地)没有人拉过提交.或者更好的是,这是一个私人回购,因此首先没有打破别人克隆的危险.

推动是否会产生其他 [负面]后果--force,特别是技术后果?也许它会导致遥控器上的一些额外垃圾,或者它破坏了X Corps分析工具的1.2.3版本,或者它使得后期更加混乱,等等.任何事情?

编辑1:我有自己的轶事证据表明,--force荷兰国际集团的私人回购推不似乎造成任何问题.不过,我对感知不感兴趣; 我正在寻找参考和/或证明.

git version-control

12
推荐指数
2
解决办法
3804
查看次数

PHP中的Flex/Bison类功能

我正在寻找一种在PHP中获得Flex/Bison(或Lex/Yacc等人)支持的方法.具体来说,我正在Web UI中实现一个布尔查询解析器,而宁愿将所有操作保留在PHP中(而不是调用C解析器,或者将事物传递给Python等).

bison flex-lexer

11
推荐指数
1
解决办法
5821
查看次数

删除依赖文件

我不确定这是我在这里不明白的gmake还是gcc.

我正在使用-MM和-MD选项为我正在使用的单元测试框架生成依赖性规则.特别:

$(TEST_OBJ_DIR)/%.d: $(TEST_SRC_DIR)/%.cpp
  @$(CPPC) -MM -MD $< -o $@
  @sed -i -e 's|\(.*\)\.o:|$(OBJ_DIR)/\1.o $(TEST_OBJ_DIR)/\1.d $(TEST_OBJ_DIR)/\1.o:|' $@

-include $(TEST_DEP_FILES)
Run Code Online (Sandbox Code Playgroud)

当我运行时make,在所有二进制文件链接(正确)后,我会在退出之前看到以下额外的(无法解释的)行

rm test/obj/dice.d test/obj/regex.o test/obj/inventoryContainer.d test/obj/color-string.d test/obj/dice.o test/obj/inventoryContainer.o test/obj/color-string.o test/obj/regex.d
Run Code Online (Sandbox Code Playgroud)

那个rm命令从哪里来?唯一的地方 - 任何地方 - 我rm在makefile中有一个命令是在clean指令中

test-clean:
  rm -f $(TEST_BIN_FILES)
  rm -f $(TEST_OBJ_DIR)/*.{a,d,o}
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

dependencies gcc makefile gnu-make

11
推荐指数
1
解决办法
2095
查看次数