5 ms·
I've led adoption on that exact setup at work. You can definitely do it, but I have nothing but bad things to say about Qmake. It's poorly documented, inscrutab
by wwright 7y ago
I've led adoption on that exact setup at work. You can definitely do it, but I have nothing but bad things to say about Qmake. It's poorly documented, inscrutable, and a huge PITA. Switch to any other build system if you can.
That said, automating the builds in GitLab CI was worth it 1000x over.
- irishcoffee 7y agoIf you’re fighting qmake there is a very good chance you’re fighting the wrong problem. Is your build a complicated mess? (It shouldn’t be) Do you have a complicated multi platform mess (it shouldn’t be complicated) I would be happy to take a look at your build.
- wwright 7y agoOff the top of my head: - qmake doesn't support true dependencies between subprojects (ie, if I ask it to build a/b/c, it can't know that a/b/c depends on d/e/f) - qmake's support for integrating additional compilers is inscrutable and again, has terrible issues with parallelism and dependencies - the way it is backed by make is prone to incremental build issues
- irishcoffee 7y agoFor point 1, it can if you want it to. https://wiki.qt.io/SUBDIRS_-_handling_dependencies#Defining_Project_Dependencies:_.depends_attributes https://wiki.qt.io/SUBDIRS_-_handling_dependencies#Defining_... I have qt kits to build for 4 different platforms and 3 different build toolchains. It was very easy to set up, and flipping between kits either in creator or in a terminal takes mere seconds. I have never experienced your 3rd point.
- wwright 7y agoThat allows you to support _some_ dependency ordering from the top level, but not internally. It is very coarse, and also suffers from “recursive Makefile” issues. It’s also less ergonomic: a developer can’t go into a specific sub folder and build ONLY that sub folder and its dependencies. If you change a library, it also can't reliably tell you which other binaries are its dependents. You have to let Make walk the full project tree. By “additional compilers,” I mean adding additional metacompilers, other languages, and so on. There is QMAKE_EXTRA_COMPILERS, but I can’t figure out how to get it to properly integrate with the dependency graph for the life of me. Have you ever had to resort to “make distclean” to get a clean compile?
- irishcoffee 7y agoOn your first point I respectfully disagree. The functionality does exactly what you claim it doesn’t do. You are mistaken on every point in your first paragraph. For your second point: https://ortogonal.github.io/qmake-extra-compiler/ https://ortogonal.github.io/qmake-extra-compiler/ I have never used this but it looks straightforward enough. I have never had to use make distclean. I use make clean && qmake && make sometimes.
- jcelerier 7y ago> It’s also less ergonomic: a developer can’t go into a specific sub folder and build ONLY that sub folder and its dependencies I'm not a fan of qmake but this works just fine with it.
- wwright 7y agoThe dependencies is the trick. Given I have this layout: bin/bin.pro # specify bin/bar/ as subfolder bin/bar/bar.c bin/bar/bah.h bin/bar/bar.pro lib/lib.pro # specify lib/foo/ as subfolder lib/foo/foo.c lib/foo/foo.h lib/foo/foo.pro project.pro # specify bin/ and lib/ as subfolders And I have a fresh checkout, how do I compile "bin/bar" and all of its dependencies automatically? I want to run ONLY "bin/bar". I don't want to compile the entire repo. I don't want to have to investigate "bin/bar" and learn all of its transitive dependencies. I just want to run "bin/bar". Honest to god, I have wanted this for over a year and it does not seem possible.