user1902689
user1902689

Reputation: 1775

Separate build directory for autotools projects not designed to use one

... Sorry, this has to be a duplicate, but I'm just running across answers for people who are making their own projects and can change the build system setup.

Can I always compile a program in a separate build directory, or must it be supported by the program's build system?

For vim, you compile using: "./configure && make && sudo make install". If I'm in vim.hg.build and run "../vim.hg/configure .....", I get :

../vim.hg/configure: line 6: cd: src: No such file or directory

For git, you compile using: "make configure && ./configure && make && sudo make install". I was hoping being in git.git.build and running "make --directory=../git.git configure" would work, but that leaves the configure file in ../git.git. Well, maybe just configure left behind isn't so bad, so I then tried "../git.git/configure" which successfully created config.status, config.log, and config.mak.autogen in the build directory. But running make gives:

make: *** No targets specified and no makefile found.  Stop.

... Yes, the only Makefile is in git.git itself.

I even tried symlinking the entire directory by running:

for fl in `ls -a ../vim.hg`; do
    echo "$fl"
    ln -s ../vim.hg/$fl $fl
done

... But, vim's configure and make only modify existing files and subdirectories, so even though I can build this way, the build directory is left with nothing more than symlinks -- no actual separation.

Go cmake!

Upvotes: 1

Views: 514

Answers (1)

ptomato
ptomato

Reputation: 57920

Out-of-tree building is a feature of Autotools that requires both Autoconf and Automake.

Vim and Git both only use Autoconf and not Automake, so they can't take advantage of that feature.

As a more general answer to your question: simple Autotools projects should work with out-of-tree builds automatically. When using certain advanced features, a bit of care must be taken to ensure that out-of-tree builds continue to work. Sometimes projects don't do this.

(Running make distcheck will test out-of-tree building, so it's a good idea to run it at least once before making a release.)

Upvotes: 2

Related Questions