29

Is it possible to call a CMake function out of an add_custom_target or add_custom_command?

I know I could move the CMake function to a Python (or whatever) script and call it from add_custom_target/command but I would like to avoid having tons of script next to the existing CMake infra.

What I want to achieve is to use CPack for generating a zip package of binary artifacts and publish them in an artifact repository. For the publishing part I have already the CMake function created but now I need to combine the packaging and publishing together.

Thanks for any help/hints in advance.

1
  • I looked for the same and after a few minutes i realized that this is impossible because cmake is a build-generator generator. This command will just be run at a different time, for example from within your IDE, when the cmake is just not existing. Commented Dec 18, 2018 at 15:04

1 Answer 1

44

I encountered this issue while writing a CMake build system for BVLC/Caffe. What I finally did is I put the function content into a separate CMake script and called it from within add_custom_target by invoking:

add_custom_target(target_name
    COMMAND ${CMAKE_COMMAND} -P path_to_script
)

Invoking CMake with -P flag makes it act as a scripting language. You can put any CMake functions inside the script.

Sign up to request clarification or add additional context in comments.

7 Comments

It boggles my mind that you cannot call cmake commands like FILE directly from within add_custom_command
Looks interesting, are parent CMake file definitions retained?
Actually, I found out that it doesn't BUT you can add a bunch of -D switched to 'forward' existing definitions to the child CMake script: add_custom_command( OUTPUT Dockerfile.base COMMAND ${CMAKE_COMMAND} -D DISTRO_NAME=${DISTRO_NAME} -D DISTRO_VERSION=${DISTRO_VERSION} -D PROJECT_TEMPLATE_DIR=${PROJECT_TEMPLATE_DIR} -P ${CMAKE_MODULE_PATH}/ConfigureDockerfileBase.cmake COMMENT "Configure the Dockerfile.base file." )
What if I want to implement such logic: execute that script only when a variable is defined ? How should I write this in add_custom_target ? @Adam
Works great when the function is in a .cmake file, is there an option to call a function defined on the same CMakeLists.txt file ? @Adam Kosiorek
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.