Hi,
I've used CMake for a 10+ years now.
I'm not a newbie, but I still discover CMake awesomeness as well as its traps.
Now, I'm trying to catch up with the modern CMake party and
I obviously watched the famous Daniel Pfeifer's lecture [1] (I'm late, I know!)
I asked a simple question on #cmake at cpplang.slack.com:
Given
add_executable(app app.cpp)
target_link_libraries(app PRIVATE Boost::filesystem)
Is that correct to expect the myapp target is also configured with
all the corresponding ***include*** directories (ie. Boost headers location)?
Or, do I need to call anything else, like:
target_include_directories(app PRIVATE Boost::boost)
Then, I realised that the current CMake API is does not follow its own evolution
that happened recently leaving lots of room for semantical ambiguity.
In the 'old school' CMake, I would write:
target_link_libraries(app ${Boost_LIBRARIES})
target_include_directories(app ${Boost_INCLUDE_DIRS})
All is clear and explicit.
In the modern CMake, I write:
target_link_libraries(app Boost::system)
Is all equally clear here? No!
Why CMake does not follow its own evolution and does not
update its API with **new** commands to support the modern CMake?
Why I can not write:
target_use(app Boost::system Boost::filesystem)
or
target_use_targets(app Boost::system Boost::filesystem)
and, actually read and understand what I'm doing?
(If you're now typing "why don't you create a custom macro wrapper"
response, please don't!)
How nicely it would fit into the concept of CMake member functions
presented by Daniel [1] (@17:25 min), wouldn't it?
Disclaimer: Originally, the idea came from Colby Pike [2] who suggested [3]
use_targets(app Boost::system)
and I just renamed it to fit in the Daniel's concept of looking at CMake API
as OOP, that is OOP like in C in GTK+ :), of course.
[1] https://twitter.com/mloskot/status/973914895287713793
[2] https://github.com/vector-of-bool/vscode-cmake-tools
[3] https://cpplang.slack.com/archives/C5Y2GDECX/p1521227050000490
Best regards,
--
Mateusz Loskot, http://mateusz.loskot.net
--
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:
https://cmake.org/mailman/listinfo/cmake