C++ cmake:尝试在cmake脚本执行期间调用msbuild
我正在尝试将我的Visual Studio解决方案迁移到CMakeC++ cmake:尝试在cmake脚本执行期间调用msbuild,c++,cmake,C++,Cmake,我正在尝试将我的Visual Studio解决方案迁移到CMake 我有两个项目——生成器(Guangal.exe生成C++文件源)和MyPROJ(包括一些必须由Guang.exe处理的文本文件)。 我想要的是: 建造发电机项目 从STEP1使用Guang.Exe从ProjyMyProj/中的文本文件生成C++源文件 将这些生成的源文件放入myProj的最终VS项目中 到目前为止我所做的: #####################################################
我有两个项目——生成器(Guangal.exe生成C++文件源)和MyPROJ(包括一些必须由Guang.exe处理的文本文件)。 我想要的是:
###################################################################
# in root/generator/CMakeLists.txt:
set(SRC_LIST .... )
set(HDR_LIST .... )
add_executable(generator ${SRC_LIST} ${HDR_LIST})
###################################################################
# in root/my_proj/CMakeLists.txt:
add_subdirectory(../generator/ ../generator/cmake_out)
# TRY TO BUILD GENERATOR.EXE. DON'T WORK, BECAUSE ../generator/cmake_out/ IS EMPTY YET
execute_process(COMMAND msbuild ../generator/cmake_out/generator.vcxproj)
# <copy generated files to ./src>
add_subdirectory(src)
###################################################################
# in root/my_proj/src/CMakeLists.txt:
set(SRC_LIST SomeSource.cpp .... )
set(HDR_LIST SomeSource.h .... )
add_library(myProj STATIC ${SRC_LIST} ${HDR_LIST} )
###################################################################
#在root/generator/CMakeLists.txt中:
设置(SRC_列表…)
设置(HDR_列表…)
添加可执行文件(生成器${SRC_LIST}${HDR_LIST})
###################################################################
#在root/my_proj/CMakeLists.txt中:
添加子目录(../generator/../generator/cmake_out)
#尝试生成GENERATOR.EXE。不工作,因为../generator/cmake_out/还为空
执行进程(命令msbuild../generator/cmake_out/generator.vcxproj)
#
添加子目录(src)
###################################################################
#在root/my_proj/src/CMakeLists.txt中:
设置(SRC_LIST SomeSource.cpp…)
设置(HDR\u LIST SomeSource.h…)
添加库(myProj STATIC${SRC_LIST}${HDR_LIST})
那么,这里出了什么问题?为什么execute_process()失败?似乎CMake的执行顺序非常混乱。用于在编译期间执行generator.exe。确保指定生成的所有输出文件。将这些输出文件列为myProj的源文件。CMake应该为您构建一个包含两个项目的解决方案,这两个项目将首先构建generator,执行它以生成自动myProj文件,然后构建myProj
add_custom_command(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/output1.cpp ${CMAKE_CURRENT_BINARY_DIR}/output1.h
COMMAND generator
DEPENDS generator
)
add_library(myProj ${CMAKE_CURRONT_BINARY_DIR}/output.h ${CMAKE_CURRENT_BINARY_DIR}/output.cpp)
看起来
execute\u进程
失败是您遇到的最小问题,但要回答您的问题:首先,您可以使用
execute_process(COMMAND msbuild ../generator/cmake_out/generator.vcxproj
RESULT_VARIABLE result)
message(STATUS "Result: ${result}")
您可能会看到“系统找不到指定的文件”,因为cmakeshell不知道msbuild命令所在的目录。您可以只提供msbuild的完整路径,例如在我的系统(VS 2013)上,我将使用:
execute_process(COMMAND "C:\\Program Files\\MSBuild\\14.0\\Bin\\MSBuild.exe"
../generator/cmake_out/generator.vcxproj)
据我所知,您的建议可能会导致在项目构建阶段(在CMake执行之后)生成源文件。这样我就不会在VS项目中看到生成的文件,对吗?这些文件在第一次构建之后才会存在,但名称将列在项目文件中(如果我没记错的话)。在生成的VS项目中包含这些生成的源文件非常重要。问题是-为什么execute_process()失败?