git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] cmake: ignore generated files

From
Đoàn Trần Công Danh <congdanhqx@gmail.com>
Date
Sep 19, 2020, 00:40 UTC
Message-ID
<20200919004030.GB1837@danh.dev>
In-Reply-To
<xmqq7dsrnjhi.fsf@gitster.c.googlers.com>
On 2020-09-18 09:21:45-0700, Junio C Hamano <gitster@pobox.com> wrote:
Show 9 quoted lines
> Đoàn Trần Công Danh  <congdanhqx@gmail.com> writes:
> 
> > Actually, in CMake land, people usually do this instead:
> >
> > 	mkdir build
> > 	cmake [-Ggenerator] ..
> > 	<make/ninja/msbuild>
> 
> I presume you "cd build" between steps 1 & 2?
Opps, yes, there is a "cd build" there, and it should be:
	cmake [-G<generator>] ..

<generator> is the target build system, default to "Unix Makefiles" in *nix land.

> I take the "people usually do" is the best current practice?

I would say it's the best practice. It's recommended in cmake official guide (although, they don't write the word "best practice") [1]

	It is recommended to build in a separate directory to the
	source because that keeps the source directory pristine,
	allows for building a single source with multiple toolchains,
	and allows easy clearing of build artifacts by simply deleting
	the build directory.
Show 20 quoted lines
> 
> > Then, when they want to run something equivalent with make distclean,
> > they run:
> >
> > 	cd ..
> > 	rm -rf build
> >
> > instead.
> >
> > The change that Dscho suggested was meant for those people that run
> > CMake in same directory of source dir, which is mostly discouraged
> > in CMake land.
> >
> > In additional, CMake's default Generator in *nix is Unix Makefiles,
> > which will clash with our Makefile, and totally unsupported.
> 
> I recall that our CMakeLists file asks the top-level Makefile about
> basic things so that we do not have to duplicate "list of files"
> etc.  in places, so I can understand that it would lead to a
> disaster to do "cmake -Ggenerator" at the top-level.

Yes, and in some first iteration, the proposal didn't check for builddir != sourcedir when -G"Unix Makefiles", which was corrected later.

I haven't checked, but I could imagine that "cmake -Gninja" at top-level sourcedir should work without problems, though.

Show 18 quoted lines
> > I think the original CMake proposal didn't touch .gitignore because
> > they run in a separated build-dir.
> 
> If so, not only my "do we need a matching change to CMakeLists to
> teach how to clean crufts?" becomes unnecessary, but the original
> patch that started this thread to touch .gitignore at the top level,
> does, too.
> 
> I wonder what led Dscho not to follow the "create a 'build' dir and
> do things there" practice.  Judging from the fact that the "because
> they run in a separate build directory" assumption did not hold to
> somebody as experienced as Dscho, it is likely others would do the
> same.
> 
> What can we do to make it easier for people to discover and follow
> the best current practice?  Are there things in our build
> instruction document (e.g. the comment at the top of CMakeLists.txt)
> that needs updating?

I think Sibi had done a lot of good work to write instruction at the top of CMakeLists.txt, I guess it's a bit too much instruction. The instruction for out of source build was written after the instruction to build in-tree.

Should we change the order?  I don't really know.

I only tried to build Git with CMake only one during the review process. And haven't touched it ever since.

1: https://cmake.org/cmake/help/v3.18/guide/user-interaction/index.html#command-line-cmake-tool
-- 
Danh
Previous: Junio C HamanoNext: Junio C Hamano
Message 7 of 22 in “cmake: ignore generated files”
  1. cmake: ignore generated filesJohannes Schindelin via GitGitGadget, Sep 17, 2020
  2. Junio C HamanoSep 17, 2020
  3. Johannes SchindelinSep 18, 2020
  4. Junio C HamanoSep 18, 2020
  5. Đoàn Trần Công DanhSep 18, 2020
  6. Junio C HamanoSep 18, 2020
  7. Đoàn Trần Công DanhSep 19, 2020
  8. Junio C HamanoSep 19, 2020
  9. Johannes SchindelinSep 20, 2020
  10. Junio C HamanoSep 23, 2020
  11. Johannes SchindelinSep 23, 2020
  12. Junio C HamanoSep 23, 2020
  13. Johannes SchindelinSep 25, 2020
  14. Đoàn Trần Công DanhSep 24, 2020
  15. Johannes SchindelinSep 25, 2020
  16. Johannes SchindelinSep 20, 2020
  17. Junio C HamanoSep 21, 2020
  18. Johannes SchindelinSep 23, 2020
  19. SZEDER GáborSep 24, 2020
  20. Junio C HamanoSep 24, 2020
  21. Junio C HamanoSep 23, 2020
  22. Junio C HamanoSep 23, 2020

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.