CMake equivalent to Boost.Build site-config.jam or user-config.jam

classic Classic list List threaded Threaded
8 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

CMake equivalent to Boost.Build site-config.jam or user-config.jam

Brian Davis-2

Is there a CMake equivalent to a site-config.jam or user-config.jam

http://www.boost.org/build/doc/html/bbv2/recipies/site-config.html

basically a CMake file the user can put in a project directory that CMake will read first when using cmake-gui that allows user to specify stuff they don't want to have to keep specifying in cmake-gui each "delete cache"

such as

set( CMAKE_INSTALL_PREFIX ${CURRENT_LIST_DIR}/install CACHE STRING "" FORCE)
set( CMAKE_DEBUG_POSTFIX d CACHE STRING "" FORCE )


There is cmake.exe

-C <initial-cache>

but requires command line

come to think of it would be nice if
set( CMAKE_GENERATOR_PLATFORM "Visual Studio 12 2013 Win64" )

in desired user config file and CMake would just "make it so" on clicking Generate.

I can do this with my own projects, by implementing it myself, but when checking out 3rd party projs they can be all over the map on config allowing a user-config.cmake would provide mechanism to tame the config problems.

Desired workflow

1) Checkout 3rd party proj

2) put a CMakeUser.txt or whatever file per project

3) Run CMake GUI Generate

4) Click Open Project

5) Change whatever manual bits in in gui

6) Update project suing git witch branches versions

7) Delete Cache

8) Return to 3

9) Doopy doopy doo whatever else




--

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
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: CMake equivalent to Boost.Build site-config.jam oruser-config.jam

Lectem

I think that you are looking for the toolchain files :

https://cmake.org/cmake/help/v3.0/manual/cmake-toolchains.7.html

 

The other option is to use a cmake script to specify your variables which includes CMakelists.txt (or the other way around if you can modify the CMakelists.txt). This would be quite similar to ctests scripts.

Some good examples are in Daniel Pfeifer’s « Effective cmake » talk https://github.com/boostcon/cppnow_presentations_2017/blob/master/05-19-2017_friday/effective_cmake__daniel_pfeifer__cppnow_05-19-2017.pdf

 

 

De : [hidden email]
Envoyé le :mardi 8 août 2017 20:09
À : [hidden email]
Objet :[CMake] CMake equivalent to Boost.Build site-config.jam oruser-config.jam

 


Is there a CMake equivalent to a site-config.jam or user-config.jam

http://www.boost.org/build/doc/html/bbv2/recipies/site-config.html

basically a CMake file the user can put in a project directory that CMake will read first when using cmake-gui that allows user to specify stuff they don't want to have to keep specifying in cmake-gui each "delete cache"

such as

set( CMAKE_INSTALL_PREFIX ${CURRENT_LIST_DIR}/install CACHE STRING "" FORCE)
set( CMAKE_DEBUG_POSTFIX d CACHE STRING "" FORCE )

There is cmake.exe

 

-C <initial-cache>

but requires command line

come to think of it would be nice if

set( CMAKE_GENERATOR_PLATFORM "Visual Studio 12 2013 Win64" )

in desired user config file and CMake would just "make it so" on clicking Generate.

I can do this with my own projects, by implementing it myself, but when checking out 3rd party projs they can be all over the map on config allowing a user-config.cmake would provide mechanism to tame the config problems.

Desired workflow

1) Checkout 3rd party proj

2) put a CMakeUser.txt or whatever file per project

3) Run CMake GUI Generate

4) Click Open Project

5) Change whatever manual bits in in gui

6) Update project suing git witch branches versions

7) Delete Cache

8) Return to 3

9) Doopy doopy doo whatever else

 

 

 


--

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
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: CMake equivalent to Boost.Build site-config.jam oruser-config.jam

Xavier Besseron
Hi all,

From my understanding, the toolchain files are only inteneded for cross-compilation and I'm afraid you will run in some kind of troubles if you try to use it for something else.

As far I know, this feature you describe does not exist in CMake.

However I have a piece of CMake code that does what you want. Please find it below. Maybe this can help you.
- By default, it loads the settings from file Local_Settings.cmake. It is ignored silently if it does not exist
- You can use -DLOCAL_SETTINGS=My_Other_Local_Settings.cmake on the CMake command line to specify a different file

In a separate file Load_Local_Settings.cmake:


# Default name for Local Settings file
set(DEFAULT_LOCAL_SETTINGS_FILE "${CMAKE_SOURCE_DIR}/Local_Settings.cmake")

# CMake cache option
set(LOCAL_SETTINGS "" CACHE FILEPATH "Path to a file containing Local Settings to load")

# Set LOCAL_SETTINGS_FILE variable
if(LOCAL_SETTINGS)
  # If cache variable is set, use it and fails if it is not valid
  if(EXISTS "${LOCAL_SETTINGS}" AND NOT IS_DIRECTORY "${LOCAL_SETTINGS}")
    set(LOCAL_SETTINGS_FILE "${LOCAL_SETTINGS}")
  else()
    message(FATAL_ERROR "'${LOCAL_SETTINGS}' is not a valid file for LOCAL_SETTINGS")
  endif()
else()
  # Otherwise, try default filename, and ignore silently if it does not exist
  if(EXISTS "${DEFAULT_LOCAL_SETTINGS_FILE}" AND NOT IS_DIRECTORY "${DEFAULT_LOCAL_SETTINGS_FILE}")
    set(LOCAL_SETTINGS_FILE "${DEFAULT_LOCAL_SETTINGS_FILE}")
  else()
    set(LOCAL_SETTINGS_FILE "")
  endif()
endif()

# Load the settings from the file if variable is defined
if(LOCAL_SETTINGS_FILE)
  message(STATUS "Using Local Settings from '${LOCAL_SETTINGS_FILE}'")
  include("${LOCAL_SETTINGS_FILE}")
endif()


Then, in your main CMakeLists.txt, just add: 


# Load Local Settings
include( Load_Local_Settings.cmake )


For example, in my Local_Settings.cmake file, I put things like:

set(EIGEN3_ROOT "/path/to/eigen/install" CACHE STRING "")
# You can use environment variables too
set(BOOST_ROOT "$ENV{EBROOTBOOST}" CACHE STRING "")



I hope this helps.

Best regards,

Xavier


On Tue, Aug 8, 2017 at 9:31 PM, Lectem <[hidden email]> wrote:

I think that you are looking for the toolchain files :

https://cmake.org/cmake/help/v3.0/manual/cmake-toolchains.7.html

 

The other option is to use a cmake script to specify your variables which includes CMakelists.txt (or the other way around if you can modify the CMakelists.txt). This would be quite similar to ctests scripts.

Some good examples are in Daniel Pfeifer’s « Effective cmake » talk https://github.com/boostcon/cppnow_presentations_2017/blob/master/05-19-2017_friday/effective_cmake__daniel_pfeifer__cppnow_05-19-2017.pdf

 

 

De : [hidden email]
Envoyé le :mardi 8 août 2017 20:09
À : [hidden email]
Objet :[CMake] CMake equivalent to Boost.Build site-config.jam oruser-config.jam

 


Is there a CMake equivalent to a site-config.jam or user-config.jam

http://www.boost.org/build/doc/html/bbv2/recipies/site-config.html

basically a CMake file the user can put in a project directory that CMake will read first when using cmake-gui that allows user to specify stuff they don't want to have to keep specifying in cmake-gui each "delete cache"

such as

set( CMAKE_INSTALL_PREFIX ${CURRENT_LIST_DIR}/install CACHE STRING "" FORCE)
set( CMAKE_DEBUG_POSTFIX d CACHE STRING "" FORCE )

There is cmake.exe

 

-C <initial-cache>

but requires command line

come to think of it would be nice if

set( CMAKE_GENERATOR_PLATFORM "Visual Studio 12 2013 Win64" )

in desired user config file and CMake would just "make it so" on clicking Generate.

I can do this with my own projects, by implementing it myself, but when checking out 3rd party projs they can be all over the map on config allowing a user-config.cmake would provide mechanism to tame the config problems.

Desired workflow

1) Checkout 3rd party proj

2) put a CMakeUser.txt or whatever file per project

3) Run CMake GUI Generate

4) Click Open Project

5) Change whatever manual bits in in gui

6) Update project suing git witch branches versions

7) Delete Cache

8) Return to 3

9) Doopy doopy doo whatever else

 

 

 


--

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



--
Dr Xavier BESSERON
Research associate
FSTC, University of Luxembourg
Campus Belval, Office MNO E04 0415-040
Phone: <a href="tel:+352%2046%2066%2044%205418" value="+3524666445418" target="_blank">+352 46 66 44 5418


--

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
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: CMake equivalent to Boost.Build site-config.jam or user-config.jam

Cristian Adam
In reply to this post by Brian Davis-2


On Tue, Aug 8, 2017 at 8:08 PM, Brian Davis <[hidden email]> wrote:

Is there a CMake equivalent to a site-config.jam or user-config.jam

http://www.boost.org/build/doc/html/bbv2/recipies/site-config.html

basically a CMake file the user can put in a project directory that CMake will read first when using cmake-gui that allows user to specify stuff they don't want to have to keep specifying in cmake-gui each "delete cache"

such as

set( CMAKE_INSTALL_PREFIX ${CURRENT_LIST_DIR}/install CACHE STRING "" FORCE)
set( CMAKE_DEBUG_POSTFIX d CACHE STRING "" FORCE )


There is cmake.exe

-C <initial-cache>

but requires command line

come to think of it would be nice if
set( CMAKE_GENERATOR_PLATFORM "Visual Studio 12 2013 Win64" )

in desired user config file and CMake would just "make it so" on clicking Generate.

I can do this with my own projects, by implementing it myself, but when checking out 3rd party projs they can be all over the map on config allowing a user-config.cmake would provide mechanism to tame the config problems.

Desired workflow

1) Checkout 3rd party proj

2) put a CMakeUser.txt or whatever file per project

3) Run CMake GUI Generate

4) Click Open Project

5) Change whatever manual bits in in gui

6) Update project suing git witch branches versions

7) Delete Cache

8) Return to 3

9) Doopy doopy doo whatever else


There is the (undocumented) PreLoad.cmake, which acts like giving a precache file with -C command line argument.

But, as it turns out, it doesn't work with server mode :(

Cheers,
Cristian.
 

--

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
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: CMake equivalent to Boost.Build site-config.jam or user-config.jam

Jean-Michaël Celerier
That's a very useful feature to have! Ideally CMake would also try to load it recursively up to the "/" folder just like for instance clang-format or clang-tidy look for their configuration folders upwards. This would allow for instance to easily build all the projects in a certain folder in release mode by default or stuff like this.



-------
Jean-Michaël Celerier

On Wed, Aug 9, 2017 at 12:20 PM, Cristian Adam <[hidden email]> wrote:


On Tue, Aug 8, 2017 at 8:08 PM, Brian Davis <[hidden email]> wrote:

Is there a CMake equivalent to a site-config.jam or user-config.jam

http://www.boost.org/build/doc/html/bbv2/recipies/site-config.html

basically a CMake file the user can put in a project directory that CMake will read first when using cmake-gui that allows user to specify stuff they don't want to have to keep specifying in cmake-gui each "delete cache"

such as

set( CMAKE_INSTALL_PREFIX ${CURRENT_LIST_DIR}/install CACHE STRING "" FORCE)
set( CMAKE_DEBUG_POSTFIX d CACHE STRING "" FORCE )


There is cmake.exe

-C <initial-cache>

but requires command line

come to think of it would be nice if
set( CMAKE_GENERATOR_PLATFORM "Visual Studio 12 2013 Win64" )

in desired user config file and CMake would just "make it so" on clicking Generate.

I can do this with my own projects, by implementing it myself, but when checking out 3rd party projs they can be all over the map on config allowing a user-config.cmake would provide mechanism to tame the config problems.

Desired workflow

1) Checkout 3rd party proj

2) put a CMakeUser.txt or whatever file per project

3) Run CMake GUI Generate

4) Click Open Project

5) Change whatever manual bits in in gui

6) Update project suing git witch branches versions

7) Delete Cache

8) Return to 3

9) Doopy doopy doo whatever else


There is the (undocumented) PreLoad.cmake, which acts like giving a precache file with -C command line argument.

But, as it turns out, it doesn't work with server mode :(

Cheers,
Cristian.
 

--

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


--

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
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: CMake equivalent to Boost.Build site-config.jam or user-config.jam

Craig Scott-3
Something which may be helpful for projects which don't have direct support for optional config is to hook into their project() command. You can set the CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE variable to the name of a file to pull in as though via an include() command right after the project() call that <PROJECT-NAME> corresponds to. No need to modify the source code of the <PROJECT-NAME> project in any way, since you're injecting another file from wherever you want to keep it.

On Wed, Aug 9, 2017 at 8:32 PM, Jean-Michaël Celerier <[hidden email]> wrote:
That's a very useful feature to have! Ideally CMake would also try to load it recursively up to the "/" folder just like for instance clang-format or clang-tidy look for their configuration folders upwards. This would allow for instance to easily build all the projects in a certain folder in release mode by default or stuff like this.



-------
Jean-Michaël Celerier

On Wed, Aug 9, 2017 at 12:20 PM, Cristian Adam <[hidden email]> wrote:


On Tue, Aug 8, 2017 at 8:08 PM, Brian Davis <[hidden email]> wrote:

Is there a CMake equivalent to a site-config.jam or user-config.jam

http://www.boost.org/build/doc/html/bbv2/recipies/site-config.html

basically a CMake file the user can put in a project directory that CMake will read first when using cmake-gui that allows user to specify stuff they don't want to have to keep specifying in cmake-gui each "delete cache"

such as

set( CMAKE_INSTALL_PREFIX ${CURRENT_LIST_DIR}/install CACHE STRING "" FORCE)
set( CMAKE_DEBUG_POSTFIX d CACHE STRING "" FORCE )


There is cmake.exe

-C <initial-cache>

but requires command line

come to think of it would be nice if
set( CMAKE_GENERATOR_PLATFORM "Visual Studio 12 2013 Win64" )

in desired user config file and CMake would just "make it so" on clicking Generate.

I can do this with my own projects, by implementing it myself, but when checking out 3rd party projs they can be all over the map on config allowing a user-config.cmake would provide mechanism to tame the config problems.

Desired workflow

1) Checkout 3rd party proj

2) put a CMakeUser.txt or whatever file per project

3) Run CMake GUI Generate

4) Click Open Project

5) Change whatever manual bits in in gui

6) Update project suing git witch branches versions

7) Delete Cache

8) Return to 3

9) Doopy doopy doo whatever else


There is the (undocumented) PreLoad.cmake, which acts like giving a precache file with -C command line argument.

But, as it turns out, it doesn't work with server mode :(

Cheers,
Cristian.
 

--

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


--

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



--
Craig Scott
Melbourne, Australia

--

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
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: CMake equivalent to Boost.Build site-config.jam or user-config.jam

Brian Davis-2
In reply to this post by Cristian Adam
Yes PreLoad.cmake was/is exactly what I am looking for.

I tested it and it works minus the bit about it not workging with:

set( CMAKE_GENERATOR_PLATFORM "Visual Studio 12 2013 Win64" )

but hey it's 99.99 percent of what I need. 

Now only if I could find that say in the documentation!

Thanks for the heads up on the feature. Nice!

On Wed, Aug 9, 2017 at 5:20 AM, Cristian Adam <[hidden email]> wrote:


On Tue, Aug 8, 2017 at 8:08 PM, Brian Davis <[hidden email]> wrote:

Is there a CMake equivalent to a site-config.jam or user-config.jam

http://www.boost.org/build/doc/html/bbv2/recipies/site-config.html

basically a CMake file the user can put in a project directory that CMake will read first when using cmake-gui that allows user to specify stuff they don't want to have to keep specifying in cmake-gui each "delete cache"

such as

set( CMAKE_INSTALL_PREFIX ${CURRENT_LIST_DIR}/install CACHE STRING "" FORCE)
set( CMAKE_DEBUG_POSTFIX d CACHE STRING "" FORCE )


There is cmake.exe

-C <initial-cache>

but requires command line

come to think of it would be nice if
set( CMAKE_GENERATOR_PLATFORM "Visual Studio 12 2013 Win64" )

in desired user config file and CMake would just "make it so" on clicking Generate.

I can do this with my own projects, by implementing it myself, but when checking out 3rd party projs they can be all over the map on config allowing a user-config.cmake would provide mechanism to tame the config problems.

Desired workflow

1) Checkout 3rd party proj

2) put a CMakeUser.txt or whatever file per project

3) Run CMake GUI Generate

4) Click Open Project

5) Change whatever manual bits in in gui

6) Update project suing git witch branches versions

7) Delete Cache

8) Return to 3

9) Doopy doopy doo whatever else


There is the (undocumented) PreLoad.cmake, which acts like giving a precache file with -C command line argument.

But, as it turns out, it doesn't work with server mode :(

Cheers,
Cristian.
 



--
Brian J. Davis

--

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
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: CMake equivalent to Boost.Build site-config.jam oruser-config.jam

Brian Davis-2
In reply to this post by Lectem


On Tue, Aug 8, 2017 at 2:31 PM, Lectem <[hidden email]> wrote:

I think that you are looking for the toolchain files :

https://cmake.org/cmake/help/v3.0/manual/cmake-toolchains.7.html

 

The other option is to use a cmake script to specify your variables which includes CMakelists.txt (or the other way around if you can modify the CMakelists.txt). This would be quite similar to ctests scripts.

Some good examples are in Daniel Pfeifer’s « Effective cmake » talk https://github.com/boostcon/cppnow_presentations_2017/blob/master/05-19-2017_friday/effective_cmake__daniel_pfeifer__cppnow_05-19-2017.pdf

 


Wow that PDF is refreshing I have started to see some of these changes to CMake creep in over the years.  Coming from Boost.Build pre 2009 I had always longed for CMake to model itself after Boost Build if only a little bit.

I had long ago complained... ok and still do..  about the underlying design, scope, documentation (lack of in some cases and misleading/bad examples see such as), and language problems of CMake.

such as:

https://cmake.org/cmake/help/latest/manual/cmake-packages.7.html and  https://cmake.org/cmake/help/latest/module/CMakePackageConfigHelpers.html#module:CMakePackageConfigHelpers
which still leave the package developer to use or not use version, put package (find_package) files "wherever"

project( proj_name VERSION 1.0) not having any bearing on CMAKE_INSTALL_PREFIX such as C:\Program Files\proj-name and not C:\Program Files\proj-name-1.0, cuz who doesn't want previous versions blasted away/written over by default?


It got so bad that I wrapped CMake goop in my own macros (which I even posted as feature request at http://www.CMake.org/Bug/view.php?id=11807 but no longer in existence - CMake's Mantis tracker ) to give concise boost.build inheritable (such as now  INTERFACE) like spec and in so doing probably violated or committed every bad practice in that pdf, but hey what choice did I have back then... in trying to keep previous projects building... not sure what choice I have now.. 

What I resorted to at the time was I rolled own macros add_project_executable, add_project_library, and add_project_configuration.  Where add_project_configuration allowed project executables and libraries to inherit build properties from configurations:
http://images.slideplayer.com/18/6139853/slides/slide_25.jpg

I know I'll build a Meta Meta (yes that's two Meta's) Build Spec Generator to take CMake Build Spec and generate a new updated CMake build spec to be used to generate the build spec to build the code.. eureka!

add_library(Bar Interface)
target_definitions(Bar IINTERFACE BAR = 1)

might get around my need for my add_project_configuration macro and friends.

Sadly the name "add_library" to say add only #defines or include dirs could more appropriately be add_configuration when not adding a "true" library. 

Rather inheriting/using config properties and the statement:

INTERFACE libraries have no build specification
They only give usage requirements

Only adds to the affront on sensibilities, cuz if it's not a library and has no build spec... errr why the term "library". 

IMO:

add_library

should unlearn/forget interface and

add_config, add_buildspec, or some other more appropriate name for this.  I can understand the lazy logic where "libraries" are both inherited/consumed by libraries and exectuables so put it there kinda logic that must have resulted in this..


These changes still don't fix the cmake-package and ExternalProject_add problems and 3rd party developer cat herding I find myself doing these days on the internet.



--

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
Loading...