Skip to content

Make sure that cmake generate build files in current dir #194

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

meowtec
Copy link
Contributor

@meowtec meowtec commented Nov 22, 2023

This should fix the Error: could not load cache BUG.

If there are already generated build files in the project directory, then if you execute the command cmake path/project in $OUT_DIR/build, cmake will not generate new build files in the $OUT_DIR/build directory.

So -B . is needed. https://cmake.org/cmake/help/latest/manual/cmake.1.html#cmdoption-cmake-B

Example:

cd /path/to/project
cmake .         
# output `Build files have been written to: /path/to/project`
cd /path/to/build && cmake /path/to/project
# we expect the build files will be generated at current dir (/path/to/build)
# but unfortunately get `Build files have been written to: /path/to/project`
cd /path/to/build && cmake /path/to/project -B .  
# output `Build files have been written to: /path/to/build`, that is right!

Infomation:

cmake --version
cmake version 3.27.7

CMake suite maintained and supported by Kitware (kitware.com/cmake).

@tgross35 tgross35 added the S-waiting-on-review Status: Awaiting review from the assignee but also interested parties. label Aug 19, 2024
Copy link
Contributor

@tgross35 tgross35 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

To be clear, the problem is that when you configure a probject with cmake-rs and then try to build/reconfigure via the cmake binary directly, it doesn't work?

This fix makes sense, but I think we should use an absolute path to avoid any possible problems related to the location of .. So two requested changes:

  1. Set -B right after here, so we set both the CWD and the -B flag

    cmd.arg(&self.path).current_dir(&build);

  2. A few lines up, change let build = dst.join("build"); to:

    let build_dir = dst.join("build");
    let build_dir = build_dir.canonicalize().unwrap_or_else(|| build_dir.clone);

    This is preexisting but makes sure we are avoiding relative links. (also make the var name more clear)

(sorry for the delay here, this crate doesn't have a lot of maintenance)

@tgross35
Copy link
Contributor

I wound up doing the second bit in #250, so all that's needed is for this to be updated to use build_dir rather than ..

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
S-waiting-on-review Status: Awaiting review from the assignee but also interested parties.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants