我有这个包含以下步骤的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。
答案 0 :(得分:3)
麻烦在于,在Make规则中,每个命令都在自己的子shell中执行;从一条线到另一条线都没有记住。所以你的第一个命令从$(BASE_DIR)
开始,进入$(GRAPHICS_BUILD_DIR)
,然后就死了。你的第二个命令从$(BASE_DIR)
开始并在那里运行Clang。
试试这个:
...
cd $(GRAPHICS_BUILD_DIR) ; clang++ -c -I$(SFML_HEADERS) $(GRAPHICS_DIR)/*.cpp
...