cmMakefile: Enforce explicit use of project() command

Fixes: 17714
This commit is contained in:
Bartosz Kosiorek 2019-04-19 10:44:41 +02:00
parent 0f27e7d165
commit 1527defbfe
3 changed files with 30 additions and 7 deletions

View File

@ -112,12 +112,13 @@ Usage
The top-level ``CMakeLists.txt`` file for a project must contain a
literal, direct call to the :command:`project` command; loading one
through the :command:`include` command is not sufficient. If no such
call exists CMake will implicitly add one to the top that enables the
default languages (``C`` and ``CXX``).
call exists, CMake will issue a warning and pretend there is a
``project(Project)`` at the top to enable the default languages
(``C`` and ``CXX``).
.. note::
Call the :command:`cmake_minimum_required` command at the beginning
of the top-level ``CMakeLists.txt`` file even before calling the
:command:`project()` command. It is important to establish version and
policy settings before invoking other commands whose behavior they
may affect. See also policy :policy:`CMP0000`.
Call the :command:`project()` command near the top of the top-level
``CMakeLists.txt``, but *after* calling :command:`cmake_minimum_required`.
It is important to establish version and policy settings before invoking
other commands whose behavior they may affect.
See also policy :policy:`CMP0000`.

View File

@ -1599,6 +1599,16 @@ void cmMakefile::Configure()
}
// if no project command is found, add one
if (!hasProject) {
this->GetCMakeInstance()->IssueMessage(
MessageType::AUTHOR_WARNING,
"No project() command is present. The top-level CMakeLists.txt "
"file must contain a literal, direct call to the project() command. "
"Add a line of code such as\n"
" project(ProjectName)\n"
"near the top of the file, but after cmake_minimum_required().\n"
"CMake is pretending there is a \"project(Project)\" command on "
"the first line.",
this->Backtrace);
cmListFileFunction project;
project.Name.Lower = "project";
project.Arguments.emplace_back("Project", cmListFileArgument::Unquoted,

View File

@ -0,0 +1,12 @@
^CMake Warning \(dev\) in CMakeLists.txt:
No project\(\) command is present. The top-level CMakeLists.txt file must
contain a literal, direct call to the project\(\) command. Add a line of
code such as
project\(ProjectName\)
near the top of the file, but after cmake_minimum_required\(\).
CMake is pretending there is a "project\(Project\)" command on the first
line.
This warning is for project developers. Use -Wno-dev to suppress it.$