On 06/09/2016 05:47 AM, Tobias Hunger wrote:
> I made some progress with extracting project structure from cmake via the
> daemon-mode. I am rather happy with the information and would love to get some
> feedback from other interested parties.

For reference, some design work on a format like this was discussed
in another thread a couple years ago:

  Extracting target metadata, IDE integration,  2014-09-19
  
http://thread.gmane.org/gmane.comp.programming.tools.cmake.devel/10711/focus=11000

>   # Data:
>   "projects":

To what does each "projects" entry correspond?

>   [
>     {
>       "configurations":
>       [
>         {
>           "name":"",
>           "targets":

Should "configurations" be an array or a map?  A map would guarantee at most
one configuration of a given name.

>           [
>             {
>               "fullName":"test",
>               "name":"test",
>               "type":"GLOBAL_TARGET"

I've never liked the name "GLOBAL_TARGET" because it does not really represent
what the type of target is.  I think we should avoid exposing the internal enum
names through the protocol (we already do in the TYPE target property, but the
GLOBAL_TARGET type is never available there).  Unfortunately I've never come
up with a better name, so I'd welcome suggestions.  The target type is used for
CMake-generated targets that get separately generated in each build 
(sub)directory,
like "make install" and "make test".  Their effects are localized to each 
directory
in generators that support that.

>             },
>             # <snip>
>             {
>               
> "buildDirectory":"/tmp/cmake-build-test/Source/CursesDialog/form",
>               "fullName":"libcmForm.a",

The build directory and the location of the library file may not be the same.
Also, there may be more than one artifact per target.  A .dll has its .lib
import library.  A .so may have versioned symlinks.  This field could be
an "artifacts" array or map.

>               "linkerLanguage":"C",
>               "name":"cmForm",
>               # "sysroot": "/some/path", if set...
>               "sourceGroups": # Just groups files with similar settings
>                               # together to save space

The name "source groups" already has a meaning in CMake.  If the goal is
just to combine sources with the same settings, please use a different name.

>               [
>                 {
>                   "compileFlags":"  -std=gnu11",

The format could use the same breakdown that CMake does internally to separate
target-wide flags from per-source flags.  That would also save space, and it
will be easy for clients to combine the flags.

>                   "defines":
>                   [
>                     "CURL_STATICLIB",
>                     # <snip>
>                     "LIBARCHIVE_STATIC"
>                   ],

While not shown in this example, in general the defines can have "=value".

>                   "includePath":
>                   [
>                     "/tmp/cmake-build-test/Utilities",
>                     # <snip>
>                     "/home/code/src/cmake/Source/CursesDialog/form"
>                   ],

Do we need some indication of whether each path is a "system" include dir?

>                   "lanugage":"C",
>                   "sources":
>                   [
>                     "fld_arg.c",
>                     # <snip>
>                     "fty_regex.c"
>                   ]

If we split target flags as mentioned above then we may need an object (map)
for each source so that it can have fields for per-source flags, defines, etc.

>       
> "currentBuildDirectory":"/tmp/cmake-build-test/Source/CursesDialog/form",
>       
> "currentSourceDirectory":"/home/code/src/cmake/Source/CursesDialog/form",

As Milian asked in a sibling response, why "current"?

Thanks,
-Brad

-- 

Powered by www.kitware.com

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Kitware offers various services to support the CMake community. For more 
information on each offering, please visit:

CMake Support: http://cmake.org/cmake/help/support.html
CMake Consulting: http://cmake.org/cmake/help/consulting.html
CMake Training Courses: http://cmake.org/cmake/help/training.html

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/cmake-developers

Reply via email to