When building on the command line on Windows using MSYS to create the make file or using the CMake GUI to generator the make file, the "MSYS Makefiles" generator is used. This creates the make file assuming that the make command will be run using a Unix shell (specifically bash or the Bourne Again SHell).
On Windows when running CMake from Qt Creator, it uses the "MinGW Makefiles" generator to generator the make file. This generator assumes that the make command is going to be run using cmd.exe, the Windows command prompt program, which Qt Creator uses cmd.exe to run the make command. The make command uses the program under which it is run to execute commands in the make file like for custom commands.
The CMake build file needed to be modified to detect when the MinGW generator was being used and use the appropriate make directory and copy commands for cmd.exe. Fortunately, the CMake CMAKE_GENERATOR variable is set to the generator is being used. So, if the generator is MinGW Makefiles, the md and copy commands are used, otherwise the mkdir -p and cp and used.
Another problem with the md command is that if the directory already exists, the command returns an error and the make command aborts. With Linux/MSYS, the -p option solves this problem. With cmd.exe, the md command has no similar option. The only solution that worked was using an if not exist command (so the md command is only performed when the test directory doesn't exist):
if not exist test-directory md test-directoryWhen the generator is not MinGW, CMake adds double quotes about each component of an individual command in the custom command if the component has a space in it, because otherwise the shell parse a path with a space incorrectly as two arguments and not one. For this reason, the command variable could not be set to mkdir -p because it would create the command "mkdir -p" and this is not a valid command. Therefore, the mkdir and -p had to be put into two separate variables. This does not occur with the MinGW generator.
No comments:
Post a Comment
All comments and feedback welcomed, whether positive or negative.
(Anonymous comments are allowed, but comments with URL links or unrelated comments will be removed.)