I’ve made a really simple project (windows, gradle 2.6) consisting of a main.cpp (printf-hello-world) and a build.gradle-file and in the same directory the gradle-distribution. I’ve used the custom-layout example:
source {
srcDir “.”
include “*.cpp”
}
this works as expected and compiles to an executable with the visual-studio compiler. but if I now change (which is clearly wrong of course) the include-statement to
(star)(star)(slash)(star).cpp
gradle will (correctly) gather also the samples from gradle themself and tries to compile them (some succeed, some will fail with compile errors). now I’m in a state with a not working compilation, but some object-files in the temporary directory.
If I now change the include back to “*.cpp” I will get linker-errors because the old object-files (from the examples) are still used to link my executable resulting in redefined symbol “main”-errors. I would expect gradle to recognize that the object files are not needed anymore and are not used to link them into the final executable.
A clean build will get me into a working build again, but I need to do a clean build.
would you mind creating a reproducable little test project for this. I suggest to not create that project in the gradle distribution directory as this is not a usual usecase and is not recommended at all for projects
compile this to get compile errors (include-paths not found, multiple main defined). now change include to be:
include "*.cpp"
and do a gradle build and it still fails. now doing a gradle clean and gradle build will result in a working build process.
having gradle as part of the project directory makes sense in our case because we have to support projects for a really long time and may have different tool-versions for different projects. (I’ve not looked at how to fix plugin-versions and other stuff to fixed versions, but that’s on my todo-list)
we’re currently looking into this to check what’s going on. regarding the need for the gradle distribution in your project directory, you should check the gradle wrapper functionality. I think this is a way more elegant way of ensuring your project is using the right gradle version.