ExternalProject_Add CONFIGURE_COMMAND不能包含双引号

我正在尝试使用CMake在64位Windows上编译和构buildOpenSSL。 这是代码。

set(VS_ENV_SETUP "\"C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\VC\\vcvarsall.bat\" amd64") set(OPENSSL_CONFIGURE perl\ Configure\ VC-WIN64A) set(OPENSSL_CONFIGURE ${VS_ENV_SETUP}\ &&\ ${OPENSSL_CONFIGURE}) set(OPENSSL_MAKE ms\\do_win64a\ &&\ nmake\ -f\ ms\\ntdll.mak) message(STATUS ${OPENSSL_CONFIGURE}) message(STATUS ${OPENSSL_MAKE}) ExternalProject_Add(openssl PREFIX openssl #-- Download Step ---------- SOURCE_DIR ${CMAKE_SOURCE_DIR}/ext/openssl #URL ${CMAKE_SOURCE_DIR}/ext/openssl #--Configure step ---------- CONFIGURE_COMMAND ${OPENSSL_CONFIGURE} #--Build Step ---------- BUILD_COMMAND ${OPENSSL_MAKE} BUILD_IN_SOURCE 1 #--install Step ---------- INSTALL_COMMAND ""} ) endif() 

打印出的信息表明一组双引号引起vcvarsall.bat的文件名扭曲,如下所示:

 "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" amd64 && perl Configure VC-WIN64A 

但是当我把这个命令放在ExternalProject_Add中作为一个参数的时候,它会抱怨

 CMake Error at C:/Program Files (x86)/CMake 2.8/share/cmake-2.8/Modules/ExternalProject.cmake:1032 (add_custom_command):COMMAND may not contain literal quotes: "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" amd64 && perl Configure VC-WIN64A 

如果我没有双引号的命令,在build设过程中不会被认为是一个整体的命令:(

什么是解决scheme或解决方法?

你不需要保护*.bat文件, VS_ENV_SETUP是一个被分隔的列表; 所以它可以这样:

 set(VS_ENV_SETUP "C:\\Program Files (x86)\\Microsoft Visual Studio 10.0\\VC\\vcvarsall.bat" amd64) 

顺便说一句

你可以使用unix风格的目录分隔符来避免无休止的\\

 set(VS_ENV_SETUP "C:/Program Files (x86)/Microsoft Visual Studio 10.0/VC/vcvarsall.bat" amd64) 

顺便说一句2

你可以使用COMMAND而不是&&来扩展你的*_COMMAND步骤(至少在这种情况下):

 ExternalProject_Add( ... # configure begin -- CONFIGURE_COMMAND ${VS_ENV_SETUP} COMMAND perl Configure VC-WIN64A # -- end ... )