0

我有这个包含以下步骤的 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。

4

1 回答 1

3

问题在于,在 Make 规则中,每个命令都在自己的子 shell 中执行;从一行到下一行都没有记住任何东西。所以你的第一个命令从 开始$(BASE_DIR),移动到$(GRAPHICS_BUILD_DIR),然后终止。您的第二个命令开始$(BASE_DIR)并在那里运行 Clang。

尝试这个:

...
cd $(GRAPHICS_BUILD_DIR) ; clang++ -c -I$(SFML_HEADERS) $(GRAPHICS_DIR)/*.cpp
...
于 2012-07-02T21:59:29.557 回答