Add automatic variable CMAKE_CURRENT_LIST_DIR(dir of CMAKE_CURRENT_LIST_FILE)

Comes with a simple test and docs.

Alex
This commit is contained in:
Alex Neundorf 2010-09-28 22:09:14 +02:00
parent f9fc79cac5
commit 41e4f1a210
3 changed files with 29 additions and 0 deletions

View File

@ -77,6 +77,25 @@ void cmDocumentVariables::DefineVariables(cmake* cm)
" processed by cmake.", false,
"Variables that Provide Information");
cm->DefineProperty
("CMAKE_CURRENT_LIST_DIR", cmProperty::VARIABLE,
"Full directory of the listfile currently being processed.",
"As CMake processes the listfiles in your project this "
"variable will always be set to the directory where the listfile which "
"is currently being processed (CMAKE_CURRENT_LIST_FILE) is located. "
"The value has dynamic scope. "
"When CMake starts processing commands in a source file "
"it sets this variable to the directory where this file is located. "
"When CMake finishes processing commands from the file it "
"restores the previous value. "
"Therefore the value of the variable inside a macro or "
"function is the directory of the file invoking the bottom-most entry on "
"the call stack, not the directory of the file containing the macro or "
"function definition."
"\n"
"See also CMAKE_CURRENT_LIST_FILE.",false,
"Variables that Provide Information");
cm->DefineProperty
("CMAKE_BUILD_TOOL", cmProperty::VARIABLE,
"Tool used for the actual build process.",

View File

@ -610,6 +610,8 @@ bool cmMakefile::ReadListFile(const char* filename_in,
}
this->AddDefinition("CMAKE_CURRENT_LIST_FILE", filenametoread);
this->AddDefinition("CMAKE_CURRENT_LIST_DIR",
cmSystemTools::GetFilenamePath(filenametoread).c_str());
// try to see if the list file is the top most
// list file for a project, and if it is, then it
@ -643,6 +645,8 @@ bool cmMakefile::ReadListFile(const char* filename_in,
}
this->AddDefinition("CMAKE_PARENT_LIST_FILE", currentParentFile.c_str());
this->AddDefinition("CMAKE_CURRENT_LIST_FILE", currentFile.c_str());
this->AddDefinition("CMAKE_CURRENT_LIST_DIR",
cmSystemTools::GetFilenamePath(currentFile).c_str());
return false;
}
// add this list file to the list of dependencies
@ -683,6 +687,8 @@ bool cmMakefile::ReadListFile(const char* filename_in,
this->AddDefinition("CMAKE_PARENT_LIST_FILE", currentParentFile.c_str());
this->AddDefinition("CMAKE_CURRENT_LIST_FILE", currentFile.c_str());
this->AddDefinition("CMAKE_CURRENT_LIST_DIR",
cmSystemTools::GetFilenamePath(currentFile).c_str());
// pop the listfile off the stack
this->ListFileStack.pop_back();

View File

@ -35,3 +35,7 @@ if(NOT "${fileOne}" STREQUAL "${fileTwo}")
message(FATAL_ERROR "Wrong CMake.cmake was included: \"${fileOne}\" expected \"${fileTwo}\"")
endif(NOT "${fileOne}" STREQUAL "${fileTwo}")
# Check that CMAKE_CURRENT_LIST_DIR is working:
# Needs to be a file in the build tree, which is correct cmake script
# but doesn't do a lot, if possible only set() commands:
include(${CMAKE_CURRENT_LIST_DIR}/../../CTestCustom.cmake)