From 378c047ae30184bdcefdf767fb49538655ee2191 Mon Sep 17 00:00:00 2001 From: Oliver Schneider Date: Fri, 13 Nov 2020 22:27:45 +0100 Subject: Makefiles: Explicitly tell 'make' tool what Makefile name to use CMake did not specify the filename of the Makefile generated by it. Due to GNU make precedence rules this means that the presence of a GNUmakefile or makefile would take precedence over the generated Makefile. This is only relevant for in-source builds and only whenever an alternative makefile by the above mentioned names exists. This patch adds the (seemingly universal) `-f` switch and the (hardcoded) filename (it is now hardcoded separately in these two files): - cmLocalUnixMakefileGenerator3.cxx - cmGlobalUnixMakefileGenerator3.cxx Fixes: #21418 --- Source/cmGlobalUnixMakefileGenerator3.cxx | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Source/cmGlobalUnixMakefileGenerator3.cxx b/Source/cmGlobalUnixMakefileGenerator3.cxx index c6c540b..9c3a533 100644 --- a/Source/cmGlobalUnixMakefileGenerator3.cxx +++ b/Source/cmGlobalUnixMakefileGenerator3.cxx @@ -589,6 +589,11 @@ cmGlobalUnixMakefileGenerator3::GenerateBuildCommand( } makeCommand.Add(this->SelectMakeProgram(makeProgram)); + // Explicitly tell the make tool to use the Makefile written by + // cmLocalUnixMakefileGenerator3::WriteLocalMakefile + makeCommand.Add("-f"); + makeCommand.Add("Makefile"); + if (jobs != cmake::NO_BUILD_PARALLEL_LEVEL) { if (jobs == cmake::DEFAULT_BUILD_PARALLEL_LEVEL) { makeCommand.Add("-j"); -- cgit v0.12 From cfce067b3facbd54275fd323a54e32e161717b8e Mon Sep 17 00:00:00 2001 From: Brad King Date: Mon, 16 Nov 2020 11:33:58 -0500 Subject: Tests: Add RunCMake.Make case for conflicting Makefile names Issue: #21418 --- Tests/RunCMake/Make/MakefileConflict.cmake | 5 +++++ Tests/RunCMake/Make/RunCMakeTest.cmake | 8 ++++++++ 2 files changed, 13 insertions(+) create mode 100644 Tests/RunCMake/Make/MakefileConflict.cmake diff --git a/Tests/RunCMake/Make/MakefileConflict.cmake b/Tests/RunCMake/Make/MakefileConflict.cmake new file mode 100644 index 0000000..6a8406f --- /dev/null +++ b/Tests/RunCMake/Make/MakefileConflict.cmake @@ -0,0 +1,5 @@ +add_custom_target(Custom) + +# Write a file that GNU make will prefer over "Makefile" +# if 'cmake --build' does not explicitly specify it. +file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/GNUmakefile" "") diff --git a/Tests/RunCMake/Make/RunCMakeTest.cmake b/Tests/RunCMake/Make/RunCMakeTest.cmake index 5562aca..b66e30e 100644 --- a/Tests/RunCMake/Make/RunCMakeTest.cmake +++ b/Tests/RunCMake/Make/RunCMakeTest.cmake @@ -42,6 +42,14 @@ run_VerboseBuild() run_cmake(CustomCommandDepfile-ERROR) run_cmake(IncludeRegexSubdir) +function(run_MakefileConflict) + run_cmake(MakefileConflict) + set(RunCMake_TEST_NO_CLEAN 1) + set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/MakefileConflict-build) + run_cmake_command(MakefileConflict-build ${CMAKE_COMMAND} --build . --target Custom) +endfunction() +run_MakefileConflict() + function(run_CMP0113 val) set(RunCMake_TEST_BINARY_DIR ${RunCMake_BINARY_DIR}/CMP0113-${val}-build) run_cmake(CMP0113-${val}) -- cgit v0.12