Fix the case where cmake --build failed with two project cmds in one file.
This adds a test that uses two project commands in the same CMakeLists.txt file. It also adds a fix so that cmake --build will work in that case. The fix sets the name of the last project command in the top level CMakeLists.txt in the cache variable CMAKE_PROJECT_NAME. This variable is used by cmake --build to find the project name.
This commit is contained in:
parent
0a6543d957
commit
5badf5f734
|
@ -47,9 +47,13 @@ bool cmProjectCommand
|
||||||
this->Makefile->AddDefinition("PROJECT_NAME", args[0].c_str());
|
this->Makefile->AddDefinition("PROJECT_NAME", args[0].c_str());
|
||||||
|
|
||||||
// Set the CMAKE_PROJECT_NAME variable to be the highest-level
|
// Set the CMAKE_PROJECT_NAME variable to be the highest-level
|
||||||
// project name in the tree. This is always the first PROJECT
|
// project name in the tree. If there are two project commands
|
||||||
// command encountered.
|
// in the same CMakeLists.txt file, and it is the top level
|
||||||
if(!this->Makefile->GetDefinition("CMAKE_PROJECT_NAME"))
|
// CMakeLists.txt file, then go with the last one, so that
|
||||||
|
// CMAKE_PROJECT_NAME will match PROJECT_NAME, and cmake --build
|
||||||
|
// will work.
|
||||||
|
if(!this->Makefile->GetDefinition("CMAKE_PROJECT_NAME")
|
||||||
|
|| (this->Makefile->GetLocalGenerator()->GetParent() == 0) )
|
||||||
{
|
{
|
||||||
this->Makefile->AddDefinition("CMAKE_PROJECT_NAME", args[0].c_str());
|
this->Makefile->AddDefinition("CMAKE_PROJECT_NAME", args[0].c_str());
|
||||||
this->Makefile->AddCacheDefinition
|
this->Makefile->AddCacheDefinition
|
||||||
|
|
|
@ -32,21 +32,21 @@ set(CMAKE_CONFIGURATION_TYPES @CMAKE_CONFIGURATION_TYPES@)
|
||||||
# run the executable out of the Debug directory if there
|
# run the executable out of the Debug directory if there
|
||||||
# are configuration types
|
# are configuration types
|
||||||
if(CMAKE_CONFIGURATION_TYPES)
|
if(CMAKE_CONFIGURATION_TYPES)
|
||||||
set(RUN_TEST "@CMAKE_BUILD_TEST_BINARY_DIR@/Debug/COnly")
|
set(RUN_TEST "@CMAKE_BUILD_TEST_BINARY_DIR@/Debug/@CMAKE_BUILD_TEST_EXE@")
|
||||||
else(CMAKE_CONFIGURATION_TYPES)
|
else(CMAKE_CONFIGURATION_TYPES)
|
||||||
set(RUN_TEST "@CMAKE_BUILD_TEST_BINARY_DIR@/COnly")
|
set(RUN_TEST "@CMAKE_BUILD_TEST_BINARY_DIR@/@CMAKE_BUILD_TEST_EXE@")
|
||||||
endif(CMAKE_CONFIGURATION_TYPES)
|
endif(CMAKE_CONFIGURATION_TYPES)
|
||||||
# run the test results
|
# run the test results
|
||||||
message("running [${RUN_TEST}]")
|
message("running [${RUN_TEST}]")
|
||||||
execute_process(COMMAND "${RUN_TEST}" RESULT_VARIABLE RESULT)
|
execute_process(COMMAND "${RUN_TEST}" RESULT_VARIABLE RESULT)
|
||||||
if(RESULT)
|
if(RESULT)
|
||||||
message(FATAL_ERROR "Error running test COnly")
|
message(FATAL_ERROR "Error running test @CMAKE_BUILD_TEST_EXE@")
|
||||||
endif(RESULT)
|
endif(RESULT)
|
||||||
|
|
||||||
# build it again with clean and only COnly target
|
# build it again with clean and only @CMAKE_BUILD_TEST_EXE@ target
|
||||||
execute_process(COMMAND "${CMAKE_COMMAND}"
|
execute_process(COMMAND "${CMAKE_COMMAND}"
|
||||||
--build "@CMAKE_BUILD_TEST_BINARY_DIR@" --config Debug
|
--build "@CMAKE_BUILD_TEST_BINARY_DIR@" --config Debug
|
||||||
--clean-first --target COnly
|
--clean-first --target @CMAKE_BUILD_TEST_EXE@
|
||||||
RESULT_VARIABLE RESULT)
|
RESULT_VARIABLE RESULT)
|
||||||
if(RESULT)
|
if(RESULT)
|
||||||
message(FATAL_ERROR "Error running cmake --build")
|
message(FATAL_ERROR "Error running cmake --build")
|
||||||
|
@ -55,5 +55,5 @@ endif(RESULT)
|
||||||
# run it again after clean
|
# run it again after clean
|
||||||
execute_process(COMMAND "${RUN_TEST}" RESULT_VARIABLE RESULT)
|
execute_process(COMMAND "${RUN_TEST}" RESULT_VARIABLE RESULT)
|
||||||
if(RESULT)
|
if(RESULT)
|
||||||
message(FATAL_ERROR "Error running test COnly after clean ")
|
message(FATAL_ERROR "Error running test @CMAKE_BUILD_TEST_EXE@ after clean ")
|
||||||
endif(RESULT)
|
endif(RESULT)
|
||||||
|
|
|
@ -220,11 +220,21 @@ IF(BUILD_TESTING)
|
||||||
|
|
||||||
SET(CMAKE_BUILD_TEST_SOURCE_DIR "${CMake_SOURCE_DIR}/Tests/COnly")
|
SET(CMAKE_BUILD_TEST_SOURCE_DIR "${CMake_SOURCE_DIR}/Tests/COnly")
|
||||||
SET(CMAKE_BUILD_TEST_BINARY_DIR "${CMake_BINARY_DIR}/Tests/CMakeBuildCOnly")
|
SET(CMAKE_BUILD_TEST_BINARY_DIR "${CMake_BINARY_DIR}/Tests/CMakeBuildCOnly")
|
||||||
|
SET(CMAKE_BUILD_TEST_EXE COnly)
|
||||||
CONFIGURE_FILE("${CMake_SOURCE_DIR}/Tests/CMakeBuildTest.cmake.in"
|
CONFIGURE_FILE("${CMake_SOURCE_DIR}/Tests/CMakeBuildTest.cmake.in"
|
||||||
"${CMake_BINARY_DIR}/Tests/CMakeBuildTest.cmake" @ONLY)
|
"${CMake_BINARY_DIR}/Tests/CMakeBuildTest.cmake" @ONLY)
|
||||||
ADD_TEST(CMakeBuildTest ${CMAKE_CMAKE_COMMAND} -P
|
ADD_TEST(CMakeBuildTest ${CMAKE_CMAKE_COMMAND} -P
|
||||||
"${CMake_BINARY_DIR}/Tests/CMakeBuildTest.cmake")
|
"${CMake_BINARY_DIR}/Tests/CMakeBuildTest.cmake")
|
||||||
LIST(APPEND TEST_BUILD_DIRS ${CMAKE_BUILD_TEST_BINARY_DIR})
|
LIST(APPEND TEST_BUILD_DIRS ${CMAKE_BUILD_TEST_BINARY_DIR})
|
||||||
|
# now do it again for a project that has two project commands
|
||||||
|
SET(CMAKE_BUILD_TEST_SOURCE_DIR "${CMake_SOURCE_DIR}/Tests/DoubleProject")
|
||||||
|
SET(CMAKE_BUILD_TEST_BINARY_DIR "${CMake_BINARY_DIR}/Tests/DoubleProject")
|
||||||
|
SET(CMAKE_BUILD_TEST_EXE just_silly)
|
||||||
|
CONFIGURE_FILE("${CMake_SOURCE_DIR}/Tests/CMakeBuildTest.cmake.in"
|
||||||
|
"${CMake_BINARY_DIR}/Tests/CMakeBuildDoubleProjectTest.cmake" @ONLY)
|
||||||
|
ADD_TEST(CMakeDoubleProject ${CMAKE_CMAKE_COMMAND} -P
|
||||||
|
"${CMake_BINARY_DIR}/Tests/CMakeBuildDoubleProjectTest.cmake")
|
||||||
|
LIST(APPEND TEST_BUILD_DIRS ${CMAKE_BUILD_TEST_BINARY_DIR})
|
||||||
|
|
||||||
ADD_TEST_MACRO(Module.CheckTypeSize CheckTypeSize)
|
ADD_TEST_MACRO(Module.CheckTypeSize CheckTypeSize)
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
project(dumb)
|
||||||
|
project(dumber)
|
||||||
|
add_executable(just_silly silly.c)
|
|
@ -0,0 +1,4 @@
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
Reference in New Issue