Hi Roy,
Roy Lemmon <[email protected]> writes: > I would like to setup a c/c++ development environment on guix. At the moment, > I > have used gcc-toolchain to bring in the compiler etc. Are other pieces > necessary ? That would be the bare minimum for c/c++. I would recommend using a build system to build your stuff like GNU autotools[0], cmake[1] or meson[2]. [0] https://www.gnu.org/software/automake/manual/html_node/Autotools-Introduction.html [1] https://cmake.org/cmake/help/latest/ [2] https://mesonbuild.com/Tutorial.html For the ease of use I would recommend meson. A cool thing I learned from the Guix days last year was from the talk "Just build it with Guix" by Efraim Flashner [3]. And that was using guix to do the testing. It works really well. [3] https://xana.lepiller.eu/guix-days-2020/guix-days-2020-efraim-flashner-build-it-with-guix.mp4 Here is a simplified template of what I use for C++. It uses meson to build and googletest[4] as the testing framework. But it should be fairly simple to change to autotools or cmake or another testing framework, e.g. catch2 [5]. [4] https://github.com/google/googletest/blob/master/docs/primer.md [5] https://github.com/catchorg/Catch2/blob/devel/docs/why-catch.md#top -------8<----------------------------------------------------------------------- (use-modules (guix build-system meson) (guix gexp) (guix git-download) (guix packages) (guix utils) ((guix licenses) #:prefix license:) (gnu packages pkg-config) (gnu packages check) (gnu packages build-tools) (gnu packages gcc) (ice-9 popen) (ice-9 rdelim) ) ;; From the talk "Just build it with Guix" by Efraim Flashner ;; presented on the Guix days 2020 ;; https://guix.gnu.org/en/blog/2020/online-guix-day-announce-2/ (define %source-dir (dirname (current-filename))) (define %git-commit (read-string (open-pipe "git show HEAD | head -1 | cut -d ' ' -f2" OPEN_READ))) (define (skip-git-and-build-directory file stat) "Skip the `.git` and `build` directory when collecting the sources." (let ((name (basename file))) (not (or (string=? name ".git") (string=? name "build"))))) (define-public package-name-here (package (name "package-name-here") (version (git-version "0.1.0" "HEAD" %git-commit)) (source (local-file %source-dir #:recursive? #t #:select? skip-git-and-build-directory)) (build-system meson-build-system) (arguments `(#:meson ,meson-0.55 ;; Pass flags to meson ;; #:configure-flags '("-Dinstall=true") )) (native-inputs `(("pkg-config" ,pkg-config) ("googletest" ,googletest) ("gcc" ,gcc-9))) (synopsis "Template for building with meson.") (description "Simple template for building with meson-0.55 and gcc-9. Using googletest as the testing framework.") ;; (home-page "https://...") (license license:gpl3+) )) package-name-here ---------------------------------------------------------------------->8-------- To use it, simply copy the template above into a file called guix.scm, update the package-name-here and version accordingly and place it at the root of your project. Note the trailing `package-name-here` at end of the template, which is there to return a package definition to guix. Then you can run: guix build -f guix.scm That build your project and run the tests. If you want to place the guix.scm in a subdirectory, say build-aux. Change (define %source-dir (dirname (current-filename))) to (define %source-dir (dirname (current-source-directory))) In the template above. After that you just run it with guix build -f build-aux/guix.scm I hope that helps. -- s/Fred[re]+i[ck]+/Fredrik/g
