c++ - cmake:在 cmake 脚本执行期间尝试调用 msbuild

标签 c++ cmake

我正在尝试将我的 Visual Studio 解决方案迁移到 CMake。

我有两个项目 - generator(generator.exe 从文本文件生成 C++ 源代码)和 myProj(包括一些必须由 generator.exe 处理的文本文件)。
我想要的是:

  1. 构建生成器项目
  2. 使用步骤 1 中的 generator.exe 从项目 myProj 中的文本文件生成 C++ 源文件
  3. 将这些生成的源文件放入 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。请务必指定生成的所有输出文件。将这些输出文件列为 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)

关于c++ - cmake:在 cmake 脚本执行期间尝试调用 msbuild,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25571448/

相关文章:

c++ - C++ 中涉及一元运算符的表达式求值

c++ - 如何在 C++ 中的特定时间启动函数?

mysql - 在 Windows 上使用 OpenSSL 从源代码编译 MySQL

cmake - 在cmake中检查 `execute_process`的退出状态

python - 如何使用 Fast-Downward 编译 OpenCV

c++ - cmake force parallel .C.o 链接前编译

c++ - 执行基本的 for 循环并得到错误 : expected primary expression before ")"

c++ - 如何有效地找到具有相同第一个和最后一个字符的字符串中的子字符串数?

opencv - 重组代码后链接到OpenCV时出错

c++ - 使用 C++ 在文件上保存一个字符指针