[Qt-creator] Project-specific make tool

Daniel Teske daniel.teske at digia.com
Wed Mar 12 16:13:27 CET 2014


On Wednesday 12 Mar 2014 15:54:45 Stephen Kelly wrote:
> Daniel Teske wrote:
> >> So, if the makefiles cause cmake to run any part of the build, it will
> >> use nmake. Creator expects jom to be used. The solution is to tell cmake
> >> to use jom.
> > 
> > Can you demonstrate this in a example? We don't expect cmake to run make
> > for us, and other things would break if cmake does that.
> 
> It would be user code that would cause it I think.
> 
> 1) User code can invoke
> 
>  "${CMAKE_COMMAND} --build ${somedir}"
> 
> There is a built-in command for creating such command lines too:
> 
>  http://www.cmake.org/cmake/help/v3.0/command/build_command.html
> 
> It's not the wrong thing to do for non-trivial user buildsystems.
> 
> 2) Code which runs a build will use the CMAKE_MAKE_PROGRAM:
> 
>  include(CTest)
> 
>  add_test(someproj_test ${CMAKE_CTEST_COMMAND}
>    --build-and-test "${CMAKE_CURRENT_SOURCE_DIR}/subproj"
>                     "${CMAKE_CURRENT_BINARY_DIR}/subproj"
>    --build-generator "${CMAKE_GENERATOR}"
>    --build-makeprogram "${CMAKE_MAKE_PROGRAM}"
>    --build-project "subproj"
>  )
> 
> This is done in CMake
> 
>  http://cmake.org/gitweb?p=cmake.git;a=blob;f=Tests/CMakeLists.txt;h=726e790
> 2#l6
> 
> and in Qt
> 
>  https://qt.gitorious.org/qt/qtbase/source/3683bc97d:mkspecs/features/ctest_
> testcase_common.prf#L86
> 
> 3) The ExternalProject module has special handling for makefile generators
> and seems to use $(MAKE), which seems to mean that jom is used to build
> external projects, so that's good.
> 
>  include(ExternalProject)
>  ExternalProject_Add(subproj
>      SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/subproj"
>      INSTALL_COMMAND ""
>  )
> 
> 4) Any try_compile will use nmake, even though the main build uses jom:
> 
>  add_library(cmaketest lib.cpp)
> 
>  file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/tc_code.cpp" "
>  int main(int argc, char** argv)
>  {
>      return 0;
>  }
>  ")
>  try_compile(tc_result "${CMAKE_CURRENT_BINARY_DIR}/tc_code"
>      "${CMAKE_CURRENT_BINARY_DIR}/tc_code.cpp"
>    OUTPUT_VARIABLE tc_out
>  )
>  message("TC###########################\n${tc_out}")
> 
> 
> 
> These are probably not cases which will cause breakage anywhere, but I don't
> see any reason *not* to tell cmake which build tool to use.

Then create a patch.

daniel



More information about the Qt-creator mailing list