[CMake] Idea: generic task-driven make-like targets with CMake

Kevin Wojniak kainjow at kainjow.com
Wed Dec 9 12:43:26 EST 2015


Looks interesting Tamas! Too bad shell scripts don’t work natively on 
Windows :)

Kevin



On 8 Dec 2015, at 16:59, Tamás Kenéz wrote:

> Kevin, I have a shell script for such tasks, see
> https://gist.github.com/tamaskenez/d4509f240f4224eb9853. Feel free to 
> use
> it if that's what you need.
> It extends the `cmake` command by executing multiple, related `cmake` 
> calls
> with one command. See docs in gist.
>
> Your 'make release' example looks like this:
>
>  cmakex cr -Hsourcedir -Bbuilddir # Configure Release
>
> with additional options you can do many tasks with one command
>
>  cmakex cbitdr -Hsourcedir -Bbuilddir -GXcode # Configure, Build,
> Install, Test Debug & Release using Xcode
>
> Tamas
>
> On Tue, Dec 8, 2015 at 7:44 PM, Kevin Wojniak <kainjow at kainjow.com> 
> wrote:
>
>> Functionality like add_custom_target combined with script mode is 
>> close,
>> but not quite there. add_custom_target already requires a build 
>> directory
>> and a generator, so it’s too late. Script mode requires setting 
>> variables
>> on the command line, so it’s too verbose. For example:
>>
>> if(“${ACTION}” STREQUAL “release”)
>>  execute_process(…)
>> endif()
>>
>> cmake -P myscript.cmake -DACTION=release
>>
>> I suppose you could have multiple *.cmake files for each task, and 
>> those
>> could then call the master file with necessary variables set, but 
>> then
>> you’d need one file per task and that could become excessive.
>>
>> Kevin
>>
>>
>>
>> On 8 Dec 2015, at 10:22, Nils Gladitz wrote:
>>
>> On 08.12.2015 19:04, Kevin Wojniak wrote:
>>>
>>>>
>>>> add_task(release
>>>> COMMAND ${CMAKE_COMMAND} -E make_directory “build_dir”
>>>> COMMAND ${CMAKE_COMMAND} -E chdir “build_dir” ${CMAKE_COMMAND}
>>>> “-DCMAKE_BUILD_TYPE=Release”, “..”
>>>> )
>>>>
>>>>
>>> There is add_custom_target().
>>>
>>> You can e.g. add_custom_target(release ${CMAKE_COMMAND} -E echo 
>>> foobar)
>>> and with the Makefiles generator run "make release" and with visual
>>> studio trigger the build of the "release" project.
>>>
>>> For scripting you can use cmake in script mode with -P.
>>>
>>> e.g. given a script file release.cmake:
>>> message("Hello World")
>>>
>>> add_custom_target(release ${CMAKE_COMMAND} -P
>>> ${CMAKE_CURRENT_SOURCE_DIR}/release.cmake)
>>>
>>> Nils
>>>
>> --
>>
>> 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
>>


More information about the CMake mailing list