C++ build dependencies


(Travis Camechis) #1

I am in the process of starting a c++ library and would love to use gradle as the build tool. One question I have is what is the proper way to add a third party library as a dependency? All the examples assume that it exists in some maven like repo from what I can tell.


#2

We’re currently working on improving the C++ support, but Gradle-1.7 has a lot of good features that may help you get started.

Regarding using 3rd party libraries, we haven’t yet built in any good support. However, I experimented with a workaround that seems to do the job for pre-existing dependencies:

def externalLib = new ExternalLibrary(project.files('src/lib/headers'), project.files('helloSharedLibrary/libhello.dylib'))
  executables {
 main {
     source cpp.sourceSets.exe
     binaries.all {
         lib externalLib
     }
 }
}
  class ExternalLibrary implements NativeDependencySet {
    final FileCollection headerDirectories
    final FileCollection binaryFiles
      ExternalLibrary(FileCollection headerDirctories, FileCollection binaryFiles) {
        this.headerDirectories = headerDirctories
        this.binaryFiles = binaryFiles
    }
      FileCollection getIncludeRoots() {
        return headerDirectories;
    }
   // The files required at link time (*.dll on windows)
    FileCollection getLinkFiles() {
        return binaryFiles;
    }
      // The files required at runtime (*.lib on windows)
    // Used with 'gradle installMainExecutable'
    FileCollection getRuntimeFiles() {
        return binaryFiles;
    }
}

If you want to use an empty file collection for getRuntimeFiles(), use ‘project.files()’.


(Travis Camechis) #3

Gotcha, I will give this try. Do you know if at some point in the future if there will be the capability to add a third party dep and have gradle scan for common locations on your system such as ( “/usr/include”, “/usr/lib”) for the actual dependency?