生成文件行“test-f”
Makefile line `test -f `
我有一个Makefile,它包含以下行:
$(CXX) $(CXXFLAGS) $(INCL) -c -o $@ `test -f '$<' || echo '$(SRCDIR)/'`$<
你能解释一下这条线是干什么的吗?
注意:Makefile取自此处:https://projects.coin-or.org/BuildTools/wiki/user-examples
该页面指定:
通用编译规则(例如.c.o)看起来可能有点像复杂的但有了这个,Makefile也可以被人们使用在Cygwin下与MS编译器(例如cl)一起工作,因为编译器不了解UNIX类型的目录路径。在这样一个在这种情况下,CYGPATH_W将通过configure设置为"CYGPATH-W",否则就是"回声"。
我不打算使用MS编译器。
test -f
是一个Unix ism,如果指定的文件存在,它将返回true,如果不存在,则返回false。"$<"是生成规则的源文件。因此,test -f '$<' || echo '$(SRCDIR)/'
将检查源文件的存在,如果它确实存在而不存在,则将回显$(SRCDIR)/
,后跟文件名。这将是实际编译器的输入。
它基本上是说"如果文件X存在于本地目录中,则编译它。否则(||
就是这样做的),编译位于目录$(SRCDIR)
中的名为X的文件"。通过这种方式,您可以将所有源代码放在一个子目录中,然后通过将某些文件的新副本放在与Makefile相同的目录中来覆盖这些文件。
相关文章:
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 文本文件中的单词链表
- CMake-按正确顺序将项目与C运行时对象文件链接
- 使用新行和不使用新行读取文件
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 挂起和取消挂起一个文件DLL
- 如何确定我已使用非编码文件到达 EOF?
- 命名空间中具有.h和.cpp文件的类
- 如何使用ndk-build.cmd构建Android.so文件
- Caffe在net_.reset上打印整个protext文件(new Net<float>(model_file,TEST))
- 我如何配置我的cmake文件以与Google Test和CTEST一起使用
- 类标头和在我的类.cpp文件中使用构造函数:"error: class 'Test' does not have any field named 'counter'"
- 使用Google Test测试文件输出
- Boost.Test 使用正则表达式测试文件内容
- 生成文件行“test-f”
- 如何将Boost.Test输出记录到HRF中的stdout和XML中的文件中
- 具有异常路径(如"C:\test\\file.txt"含义)的创建文件(...)
- 如何在Google test中使用.c文件来编写测试类而不是.cpp文件
- Scons 和 Boost.Test,我的测试项目无法与我的主项目对象文件链接