我是Cmake的新手,需要在编译时生成一些文件.一旦生成我需要编译和链接文件.我创建了cmake makefile来编译已生成的文件,如
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++)
Run Code Online (Sandbox Code Playgroud)
这成功编译了该项目.但是,soapC.cpp soapVimBindingProxy.cpp需要首先生成文件.我想在运行时使用gsoap工具生成这些文件.
以下是需要运行以生成头文件的命令
wsdl2h -o outfile.h infile.wsdl
Run Code Online (Sandbox Code Playgroud)
这将获取输入wsdl文件并创建相应的outfile.h.现在我尝试在这样的cmake中这样做
cmake_minimum_required(VERSION 2.6)
add_custom_command(
OUTPUT vsphere.h
COMMAND wsdl2h -o vsphere.h vim25/vim.wsdl
)
Run Code Online (Sandbox Code Playgroud)
但这里出了点问题.弹出没有错误,但也没有创建文件.我错过了什么吗?所有人都非常感谢.谢谢.
您刚刚创建了一个用于生成头文件的命令,因此CMake知道vsphere.h从哪里获取.我建议OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/vsphere.h在add_custom_command()通话中使用.
现在您需要创建一个目标:
add_custom_target(vsphere_header ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/vsphere.h)
Run Code Online (Sandbox Code Playgroud)
最后,让你的soapC目标依赖它:
add_dependencies(soapC vsphere_header)
Run Code Online (Sandbox Code Playgroud)
务必add_dependencies()在soapC目标定义后发出呼叫.