Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Running a custom command in Cmake

Tags:

makefile

cmake

I am very new to Cmake and need to generate some files at compile time. once generated i need to compile and link the files. I ve created the cmake makefile to compile the already generated files like

cmake_minimum_required(VERSION 2.6)
project(demo)
set(CMAKE_CXX_FLAGS "-DWITH_COOKIES")
add_library(soapC soapC.cpp soapVimBindingProxy.cpp)
add_library(stdsoap2  /home/abdullah/installs/gsoap-shah_edits/gsoap/stdsoap2.cpp)
add_executable(demo test_file.cc test_app.cc)
target_link_libraries(demo soapC stdsoap2 gsoap++)

This successfully compiles the project. However the files soapC.cpp soapVimBindingProxy.cpp needs to be generated first. And I want to generate these files at runtime using the gsoap tool.

following is the command that needs to be run to generate the header file

wsdl2h -o outfile.h infile.wsdl

This takes an input wsdl file and creates a corresponding outfile.h. Now I tried doing this in cmake like this

cmake_minimum_required(VERSION 2.6)
add_custom_command(
OUTPUT vsphere.h
COMMAND wsdl2h -o vsphere.h vim25/vim.wsdl
) 

But something goes wrong here. No error pops up but no file is created either. Am I missing something ? All help much appreciated. Thanks.

like image 812
Abdullah Avatar asked Jul 09 '12 06:07

Abdullah


1 Answers

You've just created a command for producing your header file, so CMake knows just where to get vsphere.h from. I'd recommend using OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/vsphere.h in the add_custom_command() call.

Now you need to create a target:

add_custom_target(vsphere_header ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/vsphere.h)

Finally, make your soapC target depend on it:

add_dependencies(soapC vsphere_header)

Be sure to place add_dependencies() call after soapC target definition.

like image 60
arrowd Avatar answered Sep 30 '22 06:09

arrowd