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());
|
||||
|
||||
// Set the CMAKE_PROJECT_NAME variable to be the highest-level
|
||||
// project name in the tree. This is always the first PROJECT
|
||||
// command encountered.
|
||||
if(!this->Makefile->GetDefinition("CMAKE_PROJECT_NAME"))
|
||||
// project name in the tree. If there are two project commands
|
||||
// in the same CMakeLists.txt file, and it is the top level
|
||||
// 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->AddCacheDefinition
|
||||
|
|
|
@ -32,21 +32,21 @@ set(CMAKE_CONFIGURATION_TYPES @CMAKE_CONFIGURATION_TYPES@)
|
|||
# run the executable out of the Debug directory if there
|
||||
# are 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)
|
||||
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)
|
||||
# run the test results
|
||||
message("running [${RUN_TEST}]")
|
||||
execute_process(COMMAND "${RUN_TEST}" RESULT_VARIABLE RESULT)
|
||||
if(RESULT)
|
||||
message(FATAL_ERROR "Error running test COnly")
|
||||
message(FATAL_ERROR "Error running test @CMAKE_BUILD_TEST_EXE@")
|
||||
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}"
|
||||
--build "@CMAKE_BUILD_TEST_BINARY_DIR@" --config Debug
|
||||
--clean-first --target COnly
|
||||
--clean-first --target @CMAKE_BUILD_TEST_EXE@
|
||||
RESULT_VARIABLE RESULT)
|
||||
if(RESULT)
|
||||
message(FATAL_ERROR "Error running cmake --build")
|
||||
|
@ -55,5 +55,5 @@ endif(RESULT)
|
|||
# run it again after clean
|
||||
execute_process(COMMAND "${RUN_TEST}" RESULT_VARIABLE 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)
|
||||
|
|
|
@ -220,11 +220,21 @@ IF(BUILD_TESTING)
|
|||
|
||||
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_EXE COnly)
|
||||
CONFIGURE_FILE("${CMake_SOURCE_DIR}/Tests/CMakeBuildTest.cmake.in"
|
||||
"${CMake_BINARY_DIR}/Tests/CMakeBuildTest.cmake" @ONLY)
|
||||
ADD_TEST(CMakeBuildTest ${CMAKE_CMAKE_COMMAND} -P
|
||||
"${CMake_BINARY_DIR}/Tests/CMakeBuildTest.cmake")
|
||||
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)
|
||||
|
||||
|
|
|
@ -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