我想用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
- 参数构建,但没有成功。
答案 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