...对不起,这必须是重复的,但我只是为那些正在制作自己的项目并且可以更改构建系统设置的人提供答案。
我是否可以始终在单独的构建目录中编译程序,或者程序的构建系统是否必须支持该程序?
对于vim,使用以下命令编译:“./ configure&& make&& sudo make install”。如果我在vim.hg.build并运行“../vim.hg/configure .....”,我得到:
../vim.hg/configure: line 6: cd: src: No such file or directory
对于git,你可以编译:“make configure&& ./configure&& make&& sudo make install”。我希望在git.git.build中运行“make --directory = .. / git.git configure”可以工作,但是将配置文件留在../git.git中。好吧,也许只是配置左后方并不是那么糟糕,所以我尝试了“../git.git/configure”,它在build目录中成功创建了config.status,config.log和config.mak.autogen。但是运行make会给出:
make: *** No targets specified and no makefile found. Stop.
...是的,唯一的Makefile是git.git本身。
我甚至尝试通过运行符号链接整个目录:
for fl in `ls -a ../vim.hg`; do
echo "$fl"
ln -s ../vim.hg/$fl $fl
done
...但是,vim的配置和make只修改现有的文件和子目录,所以即使我可以用这种方式构建,构建目录只剩下符号链接 - 没有实际的分离。
去cmake!
答案 0 :(得分:2)
树外建筑是Autotools的一项功能,需要Autoconf和Automake。
Vim和Git都只使用Autoconf而不是Automake,因此他们无法利用该功能。
作为对您的问题的更一般的回答:简单的Autotools项目应该自动使用树外构建。使用某些高级功能时,必须小心谨慎,以确保树外构建继续工作。有时项目不会这样做。
(运行make distcheck
将测试树外构建,因此在发布之前至少运行一次是个好主意。)