cmake:试图在cmake脚本执行期间调用msbuild
cmake: trying to call msbuild during cmake script execution
我正在尝试将Visual Studio解决方案迁移到CMake。
我有两个项目-generator(generator.exe从文本文件生成C++源)和myProj(包括一些必须由generator.exe处理的文本文件)。
我想要的是:
- 生成生成器项目
- 使用步骤1中的generator.exe从项目myProj中的文本文件生成C++源文件
- 将生成的源文件放入myProj的VS项目中
到目前为止:
###################################################################
# 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} )
那么,这里出了什么问题?execute_process()为什么失败?看起来CMake的执行顺序非常混乱。
在编译期间使用ADD_CUSTOM_COMMAND执行generator.exe。请确保指定生成的所有OUTPUT文件。将这些输出文件列为myProj的源。CMake应该为您构建一个包含两个项目的解决方案,这些项目将首先构建生成器,执行生成器生成自动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_process
失败是你最小的问题,但要回答你的问题:首先,你可以使用看到调用命令的结果
execute_process(COMMAND msbuild ../generator/cmake_out/generator.vcxproj
RESULT_VARIABLE result)
message(STATUS "Result: ${result}")
你可能会看到"系统找不到指定的文件",因为CMake shell不知道msbuild命令在哪个目录中。你可以给出msbuild的完整路径,例如在我的系统(VS 2013)上,我会使用:
execute_process(COMMAND "C:\Program Files\MSBuild\14.0\Bin\MSBuild.exe"
../generator/cmake_out/generator.vcxproj)
相关文章:
- cmake add_custom_command + Xcode:多输出 = 多命令调用
- 是否可以在调用链接器时强制 CMake 重新排序参数?
- CMake 设置使用不正确的参数数调用的目标属性
- CMake 子项目不能调用 OpenGL 函数,但父项目可以
- 为什么CMake要从include_directories()调用中删除一些包含目录
- Cmake add_executable使用不正确的参数数量调用
- 从 make 调用 CMake 以获取系统库路径
- 我可以通过设置工具链文件来替换调用 cmake -G<generator> 选项和调用 vcvarsall.bat吗?
- cmake:生成批处理文件调用cl.exe
- 更改CMAKE中的编译器调用
- 在 cmake 调用中追加CXX_FLAGS
- 如何将带有 sh 文件的文件夹添加到 cmake 以通过 system() 调用该文件
- 除非在 target_link_directories() 命令上调用 pthread,否则 CMake 构建将失败
- CMake in CLion,调用远程构建而不是本地构建
- Cmake,Android:调用在预构建库中定义的静态函数
- 从 CMAKE 调用 MIDL 编译器
- 如何将参数传递给cmake进行的makedependent调用
- CMAKE:使用不同参数重复调用函数会给出相同的结果
- 在 CMake 中处理多个FIND_PACKAGE调用
- 从不同的文件cmake调用类