[CMake] variable substitution for command arguments

Petr Kmoch petr.kmoch at gmail.com
Fri Mar 20 11:15:00 EDT 2015


Hi.

You're already (partially) doing it, with the CMAKE_SOURCE_DIR and
Boost_INCLUDE_DIRS variables. You can store whatever list of arguments you
want in a variable and expand it in the proper place. For example this:

set(MyArgs -d sqlite --sqlite-override-null --std c++11 --profile boost
--generate-query -I${CMAKE_SOURCE_DIR} -I${Boost_INCLUDE_DIRS}
--include-prefix dir_odb --changelog ${CMAKE_SOURCE_DIR}/odb/file.xml)

add_custom_command(
  TARGET markets_odb
  PRE_BUILD
  COMMAND odb ARGS ${MyArgs} ${CMAKE_CURRENT_SOURCE_DIR}/file1.hpp
  COMMAND odb ARGS ${MyArgs} ${CMAKE_CURRENT_SOURCE_DIR}/file2.hpp
)

Remember that what CMake actually does is parse some strings and lists. You
could even do this (I wouldn't recommend it, but just to show what's
possible):

set(MyCommand COMMAND odb ARGS -d sqlite --sqlite-override-null --std c++11
--profile boost --generate-query -I${CMAKE_SOURCE_DIR}
-I${Boost_INCLUDE_DIRS} --include-prefix dir_odb --changelog
${CMAKE_SOURCE_DIR}/odb/file.xml)

add_custom_command(
  TARGET markets_odb
  PRE_BUILD
  ${MyCommand} ${CMAKE_CURRENT_SOURCE_DIR}/file1.hpp
  ${MyCommand} ${CMAKE_CURRENT_SOURCE_DIR}/file2.hpp
)

Petr


On Fri, Mar 20, 2015 at 3:43 PM, MM <finjulhich at gmail.com> wrote:

> I have the following code:
>
> ADD_CUSTOM_COMMAND(TARGET markets_odb
>   PRE_BUILD
>   COMMAND odb ARGS -d sqlite --sqlite-override-null --std c++11 --profile
> boost --generate-query
>     -I${CMAKE_SOURCE_DIR} -I${Boost_INCLUDE_DIRS}
> --include-prefix dir_odb
> --changelog ${CMAKE_SOURCE_DIR}/odb/file.xml
> ${CMAKE_CURRENT_SOURCE_DIR}/file1.hpp
>   COMMAND odb ARGS -d sqlite --sqlite-override-null --std c++11 --profile
> boost --generate-query
>     -I${CMAKE_SOURCE_DIR} -I${Boost_INCLUDE_DIRS}
> --include-prefix dir_odb
> --changelog ${CMAKE_SOURCE_DIR}/odb/file.xml
> ${CMAKE_CURRENT_SOURCE_DIR}/file2.hpp
> ...
> )
>
>
> I have a few more files than the above 2.
>
> Can I factorize part the command args to reduce the repeated part?
>
> MM
>
> --
>
> 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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/cmake/attachments/20150320/30a1f5f2/attachment-0001.html>


More information about the CMake mailing list