Clang ++ -c将文件输出到错误的目录

时间:2012-07-02 17:34:17

标签: makefile llvm clang gnu llvm-clang

我有这个包含以下步骤的makefile目标:

...
cd $(GRAPHICS_BUILD_DIR)
clang++ -c -I$(SFML_HEADERS) $(GRAPHICS_DIR)/*.cpp
cd $(BASE_DIR)
...

出于某种原因,Clang将构建文件输出到BASE_DIR,而不是GRAPHICS_BUILD_DIR。一切都编译得很好,当我手动一次执行一行时,它工作正常,*.o文件输出到正确的目录。

为什么不将这些文件放在正确的目录中,如何强制它?

我在ubuntu linux内核3.2.0-26上使用了clang3.1和当前版本的GNUMake。

1 个答案:

答案 0 :(得分:3)

麻烦在于,在Make规则中,每个命令都在自己的子shell中执行;从一条线到另一条线都没有记住。所以你的第一个命令从$(BASE_DIR)开始,进入$(GRAPHICS_BUILD_DIR),然后就死了。你的第二个命令从$(BASE_DIR)开始并在那里运行Clang。

试试这个:

...
cd $(GRAPHICS_BUILD_DIR) ; clang++ -c -I$(SFML_HEADERS) $(GRAPHICS_DIR)/*.cpp
...