- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我发现使用 make 实用程序生成 header 依赖项很晦涩 makefile
对于源文件并使用它构建库或相应地创建可执行文件。
1)
按照手册中的建议:
我尝试了那里提到的方法(在我的例子中,依赖文件存在于 obj/下):
obj/%.d:%.cpp
@set -e; rm -f $@; \
g++ -MM $(CPPFLAGS) ${INC_FLAGS} $< > $@.$$$$; \
sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
rm -f $@.$$$$
但这会抛出一个 shell 错误:
/bin/sh: cannot create obj/xyz.d.23030: Directory nonexistent
但是obj目录存在,我不明白sed命令的使用。手册解释说它将任何“.obj : .cpp”规则替换为“.obj .dep : .cpp”,但是如何替换?
2)我也试过这里提到的方法:
http://mad-scientist.net/make/autodep.html
obj/%.o : %.c
g++ -MMD ${CPPFLAGS} ${INC_FLAGS} -c $$< -o $$@
@cp obj/$*.d obj/$*.P; \
sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \
-e '/^$$/ d' -e 's/$$/ :/' < $*.d >> $*.P; \
rm -f $*.d
使用此依赖文件生成但断言以下错误消息:
"/bin/sh: cannot open obj/%.P: No such file"
sed: -e expression #2, char 4: unterminated `s' command
再次使用 sed
不清楚。
这变得更加模糊......在第二种方法中,如果我不添加单独的规则来创建依赖文件并在对象创建时生成它们,因为“g++ -MP -MMD -c”会创建两个 . o 和.d。 但是如何使用在同一命令中生成的依赖项 makefile 再次编译 .o 呢?
我感谢任何帮助解决发生的错误,并帮助我理解这一点。或者请提出一些优雅的方法来做同样的事情。
编辑:(如评论中所建议)在同时使用 -MMD 和 -MP 的第二种方法中,它按预期工作,但我不明白它是如何工作的。这里不需要 sed comamnd,如果相关 header 被修改,源代码将被重建:
对象/%.o : %.c g++ -MMD -MP ${CPPFLAGS} ${INC_FLAGS} -c $$< -o $$@
但是如gcc manual page中所述,如果我没理解错-MMD用来生成依赖(不包括系统头文件)文件和-MP用来为每个头文件生成空规则,但它只修改了对象规则:即,
obj/%.o obj/%.d : %.cpp
(这就是 GNU make 手册中提到的 sed 正在做的事情)
或者类似的东西,
obj/%.o : %.cpp (list of dependent headers for particular .cpp file)
下面两个命令有什么用,它是如何工作的?
a) sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@;
二)
sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \
-e '/^$$/ d' -e 's/$$/ :/' < $*.d >> $*.P;
最佳答案
However obj directory is present,
显然不是。这是您需要解决的第一件事。
I didn't understand the use of sed command. The manual explains that it replaces any ".obj : .cpp" rule to ".obj .dep : .cpp", But How ?
特殊的 make 变量 $*
包含与目标模式匹配的词干,这将是目标中与模式匹配的部分 %
sed 命令将 obj/%.o:
替换为 obj.o obj.d:
,正如 Make 手册所述。要解释“如何”,您需要了解 sed,但这并不是一个非常复杂的 sed 命令。
Using this dependency file is generated but following error message is asserted:
那个make recipe有一个#
字符,意思是后面的都是注释,需要用\#
转义
但是,如果您使用的是 GCC,则只需将 -MMD
添加到生成目标文件的常规方法中会更容易,这将生成 .d
文件作为编译的副作用,因此您不需要为 .d
文件创建单独的目标。
关于c++ - Makefile中如何根据各自的header Dependency构建多个Source文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23928569/
这些指针之间有区别吗?每次通话到底发生了什么。 *p++ (*p)++, *(p)++ 最佳答案 1和3是一样的。 请记住 ++ 的后缀和一元形式。和 --有一个结果和一个副作用: x++ 的结果是
这个问题已经有答案了: difference between grep Vs cat and grep (5 个回答) 已关闭 8 年前。 我看到一个例子,其中有人这样做: cat source.tx
它曾经有效。现在,当我添加一个断点时: saveSnippet: (title, imageUrl, role) => { debugger; ... chrome (
开发.Net Web应用程序时,如果生成运行时错误,则会显示一些在Exception类中找不到的“额外”调试信息。 它显示了“源错误”部分,其中显示了代码摘录,其中行号准确显示了错误的产生位置,并显示
Firefox 中的“源”和“生成的源”有什么区别? 请举例说明。 编辑: 7 月 3 日 “搜索引擎”使用哪个来源,生成的还是生成前的? 最佳答案 Source 将显示页面加载的源(由服务器提供)。
对于具有两个不同工作表的Excel文件,我有两个OLE DB源。工作表A和工作表B。工作表A单元格I6包含日期,我想组合这两个源并在工作表B中添加一列,以将该值设置为工作表A的日期值。有可能做到吗?任
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
这是我的代码: import speech_recognition as sr r = sr.Recognizer() with sr.Microphone() as source: prin
我是 mysql 新手。我正在尝试 setter 工示例数据库 我尝试了 stackoverflow 中提到的一些方法,但没有帮助 谁能告诉我如何解决这个问题 SELECT 'LOADING depa
在终端中,我启动程序如下: 1) source env.sh 2) source activate enviroment 3) program --args 除了在 Pycharm 中并调试代码之外,
IntelliJ 如何知道目录是“源”还是“测试源”?如何始终将目录标记为“测试源”? build.gradle 1 apply plugin: 'java' apply plugin: 'idea'
这个问题类似于Source script to separate environment in R, not the global environment , 但有一个关键的转折。 考虑一个源另一个脚
和有什么区别--devtool source-map & eval-source-map ? 最佳答案 webpack 文档有一个方便的图表,说明这些不同的选项可能适合哪些情况。 他们显示eval-s
这个问题已经有答案了: Issue with virtualenv - cannot activate (36 个回答) 已关闭 4 年前。 venv) C:\Users\Sunil\PycharmP
在以前版本的 Akka Streams 中,groupBy 返回一个 Source 的 Source 可以具体化为一个 Source[Seq [A]]. 在 Akka Streams 2.4 中,我看
这个问题已经有答案了: Issue with virtualenv - cannot activate (36 个回答) 已关闭 4 年前。 venv) C:\Users\Sunil\PycharmP
是否可以获取 Bash 片段的源代码,但仅在特定条件成立时才实际提供其中的函数? 所以我要问的是,我可以无条件地获取目录中的所有文件,但获取的文件包含是否向采购外壳提供功能的逻辑。 例子: .bash
我无法查看 JavaCore.class 源代码,但我可以很好地使用代码。 例如,要查看方法JavaCore.create(..) 的源代码,我ctrl - click(或按f3) 在 JavaCor
-- Sample employee database -- See changelog table for details -- Copyright (C) 2007,2008, MySQL
当我在我的 IDE 中编译项目时它工作正常但是当我在 bamboo 中编译时它给我以下错误。 我已经检查过我在任务中配置的 jdk 版本是 1.6,我还尝试从 pom 中的 maven 插件强制执行
我是一名优秀的程序员,十分优秀!