CMake ExternalProject_Add:如何构建多个msbuild目标?

时间:2014-10-14 15:42:30

标签: c++ msbuild cmake

我想用MSBuild构建一个CMake ExternalProject。但我也想构建一个外部项目解决方案的子集。所以基本上它看起来像这个

ExternalProject_Add(MyExternalProject
  PREFIX ${CMAKE_BINARY_DIR}/External/myproject
    GIT_REPOSITORY ...
    CONFIGURE_COMMAND ...
    BUILD_COMMAND msbuild /p:Configuration=Release /target:TargetA;TargetB /m Project.sln
)

不幸的是,CMake总是用空格替换;,因此msbuild抱怨它已经被赋予了多个项目(* .sln)文件。

我尝试了一切:引用参数,将整个构建命令放入变量,转义分号......没有用。

最初我还尝试使用CMake的--build - 参数构建,但没有成功。

3 个答案:

答案 0 :(得分:2)

您可以向BUILD_COMMAND选项添加一条构建指令:

ExternalProject_Add(
    MyExternalProject
    ...
    BUILD_COMMAND "${CMAKE_COMMAND}" --build . --target TargetA
    COMMAND "${CMAKE_COMMAND}" --build . --target TargetB
)

答案 1 :(得分:0)

如果用逗号而不是分号分隔目标,则可以使用:

BUILD_COMMAND msbuild /p:Configuration=Release /target:TargetA,TargetB /m Project.sln

答案 2 :(得分:0)

您可以替换';'在具有不同列表分隔符的字符串中,该分隔符不受CMake的影响,例如

ExternalProject_Add(MyExternalProject
  PREFIX ${CMAKE_BINARY_DIR}/External/myproject
    GIT_REPOSITORY ...
    CONFIGURE_COMMAND ...
    LIST_SEPARATOR ^^
    BUILD_COMMAND msbuild /p:Configuration=Release /target:TargetA^^TargetB /m Project.sln
)

" ^^"然后用分号代替执行。

我在这里找到了这个答案: https://cmake.org/pipermail/cmake/2012-February/049148.html