Merge topic 'project-version-variables'
41d2f2c4
write_basic_package_version_file: use PROJECT_VERSION7e142c5a
project: Manage VERSION variables16d040c9
project: Add optional LANGUAGES keyword00007dcc
Help: Format project command and variable documentation
This commit is contained in:
commit
a7f5a6ee12
|
@ -1,27 +1,57 @@
|
|||
project
|
||||
-------
|
||||
|
||||
Set a name for the entire project.
|
||||
Set a name, version, and enable languages for the entire project.
|
||||
|
||||
::
|
||||
.. code-block:: cmake
|
||||
|
||||
project(<projectname> [languageName1 languageName2 ... ] )
|
||||
project(<PROJECT-NAME> [LANGUAGES] [<language-name>...])
|
||||
project(<PROJECT-NAME>
|
||||
[VERSION <major>[.<minor>[.<patch>[.<tweak>]]]]
|
||||
[LANGUAGES <language-name>...])
|
||||
|
||||
Sets the name of the project. Additionally this sets the variables
|
||||
<projectName>_BINARY_DIR and <projectName>_SOURCE_DIR to the
|
||||
respective values.
|
||||
Sets the name of the project and stores the name in the
|
||||
:variable:`PROJECT_NAME` variable. Additionally this sets variables
|
||||
|
||||
* :variable:`PROJECT_SOURCE_DIR`,
|
||||
:variable:`<PROJECT-NAME>_SOURCE_DIR`
|
||||
* :variable:`PROJECT_BINARY_DIR`,
|
||||
:variable:`<PROJECT-NAME>_BINARY_DIR`
|
||||
|
||||
If ``VERSION`` is specified, given components must be non-negative integers.
|
||||
If ``VERSION`` is not specified, the default version is the empty string.
|
||||
The ``VERSION`` option may not be used unless policy :policy:`CMP0048` is
|
||||
set to ``NEW``.
|
||||
|
||||
The :command:`project()` command stores the version number and its components
|
||||
in variables
|
||||
|
||||
* :variable:`PROJECT_VERSION`,
|
||||
:variable:`<PROJECT-NAME>_VERSION`
|
||||
* :variable:`PROJECT_VERSION_MAJOR`,
|
||||
:variable:`<PROJECT-NAME>_VERSION_MAJOR`
|
||||
* :variable:`PROJECT_VERSION_MINOR`,
|
||||
:variable:`<PROJECT-NAME>_VERSION_MINOR`
|
||||
* :variable:`PROJECT_VERSION_PATCH`,
|
||||
:variable:`<PROJECT-NAME>_VERSION_PATCH`
|
||||
* :variable:`PROJECT_VERSION_TWEAK`,
|
||||
:variable:`<PROJECT-NAME>_VERSION_TWEAK`
|
||||
|
||||
Variables corresponding to unspecified versions are set to the empty string
|
||||
(if policy :policy:`CMP0048` is set to ``NEW``).
|
||||
|
||||
Optionally you can specify which languages your project supports.
|
||||
Example languages are CXX (i.e. C++), C, Fortran, etc. By default C
|
||||
and CXX are enabled. E.g. if you do not have a C++ compiler, you can
|
||||
disable the check for it by explicitly listing the languages you want
|
||||
to support, e.g. C. By using the special language "NONE" all checks
|
||||
for any language can be disabled. If a variable exists called
|
||||
CMAKE_PROJECT_<projectName>_INCLUDE, the file pointed to by that
|
||||
variable will be included as the last step of the project command.
|
||||
Example languages are ``C``, ``CXX`` (i.e. C++), ``Fortran``, etc.
|
||||
By default ``C`` and ``CXX`` are enabled if no language options are
|
||||
given. Specify language ``NONE``, or use the ``LANGUAGES`` keyword
|
||||
and list no languages, to skip enabling any languages.
|
||||
|
||||
The top-level CMakeLists.txt file for a project must contain a
|
||||
literal, direct call to the project() command; loading one through the
|
||||
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).
|
||||
If a variable exists called :variable:`CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE`,
|
||||
the file pointed to by that variable will be included as the last step of the
|
||||
project command.
|
||||
|
||||
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``).
|
||||
|
|
|
@ -99,3 +99,4 @@ All Policies
|
|||
/policy/CMP0045
|
||||
/policy/CMP0046
|
||||
/policy/CMP0047
|
||||
/policy/CMP0048
|
||||
|
|
|
@ -79,7 +79,17 @@ Variables that Provide Information
|
|||
/variable/PROJECT-NAME_BINARY_DIR
|
||||
/variable/PROJECT_NAME
|
||||
/variable/PROJECT-NAME_SOURCE_DIR
|
||||
/variable/PROJECT-NAME_VERSION
|
||||
/variable/PROJECT-NAME_VERSION_MAJOR
|
||||
/variable/PROJECT-NAME_VERSION_MINOR
|
||||
/variable/PROJECT-NAME_VERSION_PATCH
|
||||
/variable/PROJECT-NAME_VERSION_TWEAK
|
||||
/variable/PROJECT_SOURCE_DIR
|
||||
/variable/PROJECT_VERSION
|
||||
/variable/PROJECT_VERSION_MAJOR
|
||||
/variable/PROJECT_VERSION_MINOR
|
||||
/variable/PROJECT_VERSION_PATCH
|
||||
/variable/PROJECT_VERSION_TWEAK
|
||||
|
||||
Variables that Change Behavior
|
||||
==============================
|
||||
|
@ -121,6 +131,7 @@ Variables that Change Behavior
|
|||
/variable/CMAKE_POLICY_DEFAULT_CMPNNNN
|
||||
/variable/CMAKE_PREFIX_PATH
|
||||
/variable/CMAKE_PROGRAM_PATH
|
||||
/variable/CMAKE_PROJECT_PROJECT-NAME_INCLUDE
|
||||
/variable/CMAKE_SKIP_INSTALL_ALL_DEPENDENCY
|
||||
/variable/CMAKE_STAGING_PREFIX
|
||||
/variable/CMAKE_SYSTEM_IGNORE_PATH
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
CMP0048
|
||||
-------
|
||||
|
||||
The :command:`project` command manages VERSION variables.
|
||||
|
||||
CMake version 3.0.0 introduced the ``VERSION`` option of the :command:`project`
|
||||
command to specify a project version as well as the name. In order to keep
|
||||
:variable:`PROJECT_VERSION` and related variables consistent with variable
|
||||
:variable:`PROJECT_NAME` it is necessary to set the VERSION variables
|
||||
to the empty string when no ``VERSION`` is given to :command:`project`.
|
||||
However, this can change behavior for existing projects that set VERSION
|
||||
variables themselves since :command:`project` may now clear them.
|
||||
This policy controls the behavior for compatibility with such projects.
|
||||
|
||||
The OLD behavior for this policy is to leave VERSION variables untouched.
|
||||
The NEW behavior for this policy is to set VERSION as documented by the
|
||||
:command:`project` command.
|
||||
|
||||
This policy was introduced in CMake version 3.0.0.
|
||||
CMake version |release| warns when the policy is not set and uses
|
||||
OLD behavior. Use the cmake_policy command to set it to OLD or
|
||||
NEW explicitly.
|
|
@ -0,0 +1,6 @@
|
|||
CMAKE_PROJECT_<PROJECT-NAME>_INCLUDE
|
||||
------------------------------------
|
||||
|
||||
A CMake language file or module to be included by the :command:`project`
|
||||
command. This is is intended for injecting custom code into project
|
||||
builds without modifying their source.
|
|
@ -3,6 +3,6 @@
|
|||
|
||||
Top level binary directory for the named project.
|
||||
|
||||
A variable is created with the name used in the PROJECT command, and
|
||||
is the binary directory for the project. This can be useful when
|
||||
SUBDIR is used to connect several projects.
|
||||
A variable is created with the name used in the :command:`project` command,
|
||||
and is the binary directory for the project. This can be useful when
|
||||
:command:`add_subdirectory` is used to connect several projects.
|
||||
|
|
|
@ -3,6 +3,6 @@
|
|||
|
||||
Top level source directory for the named project.
|
||||
|
||||
A variable is created with the name used in the PROJECT command, and
|
||||
is the source directory for the project. This can be useful when
|
||||
add_subdirectory is used to connect several projects.
|
||||
A variable is created with the name used in the :command:`project` command,
|
||||
and is the source directory for the project. This can be useful when
|
||||
:command:`add_subdirectory` is used to connect several projects.
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
<PROJECT-NAME>_VERSION
|
||||
----------------------
|
||||
|
||||
Value given to the ``VERSION`` option of the most recent call to the
|
||||
:command:`project` command with project name ``<PROJECT-NAME>``, if any.
|
||||
|
||||
See also the component-wise version variables
|
||||
:variable:`<PROJECT-NAME>_VERSION_MAJOR`,
|
||||
:variable:`<PROJECT-NAME>_VERSION_MINOR`,
|
||||
:variable:`<PROJECT-NAME>_VERSION_PATCH`, and
|
||||
:variable:`<PROJECT-NAME>_VERSION_TWEAK`.
|
|
@ -0,0 +1,5 @@
|
|||
<PROJECT-NAME>_VERSION_MAJOR
|
||||
----------------------------
|
||||
|
||||
First version number component of the :variable:`<PROJECT-NAME>_VERSION`
|
||||
variable as set by the :command:`project` command.
|
|
@ -0,0 +1,5 @@
|
|||
<PROJECT-NAME>_VERSION_MINOR
|
||||
----------------------------
|
||||
|
||||
Second version number component of the :variable:`<PROJECT-NAME>_VERSION`
|
||||
variable as set by the :command:`project` command.
|
|
@ -0,0 +1,5 @@
|
|||
<PROJECT-NAME>_VERSION_PATCH
|
||||
----------------------------
|
||||
|
||||
Third version number component of the :variable:`<PROJECT-NAME>_VERSION`
|
||||
variable as set by the :command:`project` command.
|
|
@ -0,0 +1,5 @@
|
|||
<PROJECT-NAME>_VERSION_TWEAK
|
||||
----------------------------
|
||||
|
||||
Fourth version number component of the :variable:`<PROJECT-NAME>_VERSION`
|
||||
variable as set by the :command:`project` command.
|
|
@ -3,4 +3,4 @@ PROJECT_BINARY_DIR
|
|||
|
||||
Full path to build directory for project.
|
||||
|
||||
This is the binary directory of the most recent PROJECT command.
|
||||
This is the binary directory of the most recent :command:`project` command.
|
||||
|
|
|
@ -3,4 +3,4 @@ PROJECT_NAME
|
|||
|
||||
Name of the project given to the project command.
|
||||
|
||||
This is the name given to the most recent PROJECT command.
|
||||
This is the name given to the most recent :command:`project` command.
|
||||
|
|
|
@ -3,4 +3,4 @@ PROJECT_SOURCE_DIR
|
|||
|
||||
Top level source directory for the current project.
|
||||
|
||||
This is the source directory of the most recent PROJECT command.
|
||||
This is the source directory of the most recent :command:`project` command.
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
PROJECT_VERSION
|
||||
---------------
|
||||
|
||||
Value given to the ``VERSION`` option of the most recent call to the
|
||||
:command:`project` command, if any.
|
||||
|
||||
See also the component-wise version variables
|
||||
:variable:`PROJECT_VERSION_MAJOR`,
|
||||
:variable:`PROJECT_VERSION_MINOR`,
|
||||
:variable:`PROJECT_VERSION_PATCH`, and
|
||||
:variable:`PROJECT_VERSION_TWEAK`.
|
|
@ -0,0 +1,5 @@
|
|||
PROJECT_VERSION_MAJOR
|
||||
---------------------
|
||||
|
||||
First version number component of the :variable:`PROJECT_VERSION`
|
||||
variable as set by the :command:`project` command.
|
|
@ -0,0 +1,5 @@
|
|||
PROJECT_VERSION_MINOR
|
||||
---------------------
|
||||
|
||||
Second version number component of the :variable:`PROJECT_VERSION`
|
||||
variable as set by the :command:`project` command.
|
|
@ -0,0 +1,5 @@
|
|||
PROJECT_VERSION_PATCH
|
||||
---------------------
|
||||
|
||||
Third version number component of the :variable:`PROJECT_VERSION`
|
||||
variable as set by the :command:`project` command.
|
|
@ -0,0 +1,5 @@
|
|||
PROJECT_VERSION_TWEAK
|
||||
---------------------
|
||||
|
||||
Fourth version number component of the :variable:`PROJECT_VERSION`
|
||||
variable as set by the :command:`project` command.
|
|
@ -99,7 +99,7 @@
|
|||
#
|
||||
# ::
|
||||
#
|
||||
# WRITE_BASIC_PACKAGE_VERSION_FILE( filename VERSION major.minor.patch COMPATIBILITY (AnyNewerVersion|SameMajorVersion|ExactVersion) )
|
||||
# WRITE_BASIC_PACKAGE_VERSION_FILE( filename [VERSION major.minor.patch] COMPATIBILITY (AnyNewerVersion|SameMajorVersion|ExactVersion) )
|
||||
#
|
||||
#
|
||||
#
|
||||
|
@ -112,6 +112,9 @@
|
|||
# filename is the output filename, it should be in the build tree.
|
||||
# major.minor.patch is the version number of the project to be installed
|
||||
#
|
||||
# If no ``VERSION`` is given, the :variable:`PROJECT_VERSION` variable
|
||||
# is used. If this hasn't been set, it errors out.
|
||||
#
|
||||
# The COMPATIBILITY mode AnyNewerVersion means that the installed
|
||||
# package version will be considered compatible if it is newer or
|
||||
# exactly the same as the requested version. This mode should be used
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
#
|
||||
# ::
|
||||
#
|
||||
# WRITE_BASIC_CONFIG_VERSION_FILE( filename VERSION major.minor.patch COMPATIBILITY (AnyNewerVersion|SameMajorVersion) )
|
||||
# WRITE_BASIC_CONFIG_VERSION_FILE( filename [VERSION major.minor.patch] COMPATIBILITY (AnyNewerVersion|SameMajorVersion) )
|
||||
#
|
||||
#
|
||||
#
|
||||
|
@ -46,7 +46,11 @@ function(WRITE_BASIC_CONFIG_VERSION_FILE _filename)
|
|||
endif()
|
||||
|
||||
if("${CVF_VERSION}" STREQUAL "")
|
||||
if ("${PROJECT_VERSION}" STREQUAL "")
|
||||
message(FATAL_ERROR "No VERSION specified for WRITE_BASIC_CONFIG_VERSION_FILE()")
|
||||
else()
|
||||
set(CVF_VERSION "${PROJECT_VERSION}")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
configure_file("${versionTemplateFile}" "${_filename}" @ONLY)
|
||||
|
|
|
@ -341,6 +341,11 @@ cmPolicies::cmPolicies()
|
|||
CMP0047, "CMP0047",
|
||||
"Use QCC compiler id for the qcc drivers on QNX.",
|
||||
3,0,0,0, cmPolicies::WARN);
|
||||
|
||||
this->DefinePolicy(
|
||||
CMP0048, "CMP0048",
|
||||
"project() command manages VERSION variables.",
|
||||
3,0,0,0, cmPolicies::WARN);
|
||||
}
|
||||
|
||||
cmPolicies::~cmPolicies()
|
||||
|
|
|
@ -101,6 +101,7 @@ public:
|
|||
CMP0045, ///< Error on non-existent target in get_target_property
|
||||
CMP0046, ///< Error on non-existent dependency in add_dependencies
|
||||
CMP0047, ///< Use QCC compiler id for the qcc drivers on QNX.
|
||||
CMP0048, ///< project() command manages VERSION variables
|
||||
|
||||
/** \brief Always the last entry.
|
||||
*
|
||||
|
|
|
@ -62,15 +62,168 @@ bool cmProjectCommand
|
|||
"Value Computed by CMake", cmCacheManager::STATIC);
|
||||
}
|
||||
|
||||
bool haveVersion = false;
|
||||
bool haveLanguages = false;
|
||||
std::string version;
|
||||
std::vector<std::string> languages;
|
||||
if(args.size() > 1)
|
||||
{
|
||||
enum Doing { DoingLanguages, DoingVersion };
|
||||
Doing doing = DoingLanguages;
|
||||
for(size_t i = 1; i < args.size(); ++i)
|
||||
{
|
||||
if(args[i] == "LANGUAGES")
|
||||
{
|
||||
if(haveLanguages)
|
||||
{
|
||||
this->Makefile->IssueMessage
|
||||
(cmake::FATAL_ERROR, "LANGUAGES may be specified at most once.");
|
||||
cmSystemTools::SetFatalErrorOccured();
|
||||
return true;
|
||||
}
|
||||
haveLanguages = true;
|
||||
doing = DoingLanguages;
|
||||
}
|
||||
else if (args[i] == "VERSION")
|
||||
{
|
||||
if(haveVersion)
|
||||
{
|
||||
this->Makefile->IssueMessage
|
||||
(cmake::FATAL_ERROR, "VERSION may be specified at most once.");
|
||||
cmSystemTools::SetFatalErrorOccured();
|
||||
return true;
|
||||
}
|
||||
haveVersion = true;
|
||||
doing = DoingVersion;
|
||||
}
|
||||
else if(doing == DoingVersion)
|
||||
{
|
||||
doing = DoingLanguages;
|
||||
version = args[i];
|
||||
}
|
||||
else // doing == DoingLanguages
|
||||
{
|
||||
languages.push_back(args[i]);
|
||||
}
|
||||
}
|
||||
|
||||
if (haveVersion && !haveLanguages && !languages.empty())
|
||||
{
|
||||
this->Makefile->IssueMessage
|
||||
(cmake::FATAL_ERROR,
|
||||
"project with VERSION must use LANGUAGES before language names.");
|
||||
cmSystemTools::SetFatalErrorOccured();
|
||||
return true;
|
||||
}
|
||||
if (haveLanguages && languages.empty())
|
||||
{
|
||||
languages.push_back("NONE");
|
||||
}
|
||||
|
||||
cmPolicies::PolicyStatus cmp0048 =
|
||||
this->Makefile->GetPolicyStatus(cmPolicies::CMP0048);
|
||||
if (haveVersion)
|
||||
{
|
||||
// Set project VERSION variables to given values
|
||||
if (cmp0048 == cmPolicies::OLD ||
|
||||
cmp0048 == cmPolicies::WARN)
|
||||
{
|
||||
this->Makefile->IssueMessage
|
||||
(cmake::FATAL_ERROR,
|
||||
"VERSION not allowed unless CMP0048 is set to NEW");
|
||||
cmSystemTools::SetFatalErrorOccured();
|
||||
return true;
|
||||
}
|
||||
|
||||
cmsys::RegularExpression
|
||||
vx("^([0-9]+(\\.[0-9]+(\\.[0-9]+(\\.[0-9]+)?)?)?)?$");
|
||||
if(!vx.find(version))
|
||||
{
|
||||
std::string e = "VERSION \"" + version + "\" format invalid.";
|
||||
this->Makefile->IssueMessage(cmake::FATAL_ERROR, e);
|
||||
cmSystemTools::SetFatalErrorOccured();
|
||||
return true;
|
||||
}
|
||||
|
||||
std::string vs;
|
||||
const char* sep = "";
|
||||
char vb[4][64];
|
||||
unsigned int v[4] = {0,0,0,0};
|
||||
int vc = sscanf(version.c_str(), "%u.%u.%u.%u",
|
||||
&v[0], &v[1], &v[2], &v[3]);
|
||||
for(int i=0; i < 4; ++i)
|
||||
{
|
||||
if(i < vc)
|
||||
{
|
||||
sprintf(vb[i], "%u", v[i]);
|
||||
vs += sep;
|
||||
vs += vb[i];
|
||||
sep = ".";
|
||||
}
|
||||
else
|
||||
{
|
||||
vb[i][0] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
std::string vv;
|
||||
vv = args[0] + "_VERSION";
|
||||
this->Makefile->AddDefinition("PROJECT_VERSION", vs.c_str());
|
||||
this->Makefile->AddDefinition(vv.c_str(), vs.c_str());
|
||||
vv = args[0] + "_VERSION_MAJOR";
|
||||
this->Makefile->AddDefinition("PROJECT_VERSION_MAJOR", vb[0]);
|
||||
this->Makefile->AddDefinition(vv.c_str(), vb[0]);
|
||||
vv = args[0] + "_VERSION_MINOR";
|
||||
this->Makefile->AddDefinition("PROJECT_VERSION_MINOR", vb[1]);
|
||||
this->Makefile->AddDefinition(vv.c_str(), vb[1]);
|
||||
vv = args[0] + "_VERSION_PATCH";
|
||||
this->Makefile->AddDefinition("PROJECT_VERSION_PATCH", vb[2]);
|
||||
this->Makefile->AddDefinition(vv.c_str(), vb[2]);
|
||||
vv = args[0] + "_VERSION_TWEAK";
|
||||
this->Makefile->AddDefinition("PROJECT_VERSION_TWEAK", vb[3]);
|
||||
this->Makefile->AddDefinition(vv.c_str(), vb[3]);
|
||||
}
|
||||
else if(cmp0048 != cmPolicies::OLD)
|
||||
{
|
||||
// Set project VERSION variables to empty
|
||||
std::vector<std::string> vv;
|
||||
vv.push_back("PROJECT_VERSION");
|
||||
vv.push_back("PROJECT_VERSION_MAJOR");
|
||||
vv.push_back("PROJECT_VERSION_MINOR");
|
||||
vv.push_back("PROJECT_VERSION_PATCH");
|
||||
vv.push_back("PROJECT_VERSION_TWEAK");
|
||||
vv.push_back(args[0] + "_VERSION");
|
||||
vv.push_back(args[0] + "_VERSION_MAJOR");
|
||||
vv.push_back(args[0] + "_VERSION_MINOR");
|
||||
vv.push_back(args[0] + "_VERSION_PATCH");
|
||||
vv.push_back(args[0] + "_VERSION_TWEAK");
|
||||
std::string vw;
|
||||
for(std::vector<std::string>::iterator i = vv.begin();
|
||||
i != vv.end(); ++i)
|
||||
{
|
||||
const char* v = this->Makefile->GetDefinition(i->c_str());
|
||||
if(v && *v)
|
||||
{
|
||||
if(cmp0048 == cmPolicies::WARN)
|
||||
{
|
||||
vw += "\n ";
|
||||
vw += *i;
|
||||
}
|
||||
else
|
||||
{
|
||||
this->Makefile->AddDefinition(i->c_str(), "");
|
||||
}
|
||||
}
|
||||
}
|
||||
if(!vw.empty())
|
||||
{
|
||||
cmOStringStream w;
|
||||
w << (this->Makefile->GetPolicies()
|
||||
->GetPolicyWarning(cmPolicies::CMP0048))
|
||||
<< "\nThe following variable(s) would be set to empty:" << vw;
|
||||
this->Makefile->IssueMessage(cmake::AUTHOR_WARNING, w.str());
|
||||
}
|
||||
}
|
||||
|
||||
if (languages.empty())
|
||||
{
|
||||
// if no language is specified do c and c++
|
||||
languages.push_back("C");
|
||||
|
|
|
@ -82,6 +82,7 @@ add_RunCMake_test(include)
|
|||
add_RunCMake_test(include_directories)
|
||||
add_RunCMake_test(list)
|
||||
add_RunCMake_test(message)
|
||||
add_RunCMake_test(project)
|
||||
add_RunCMake_test(string)
|
||||
add_RunCMake_test(try_compile)
|
||||
add_RunCMake_test(set)
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
^$
|
|
@ -0,0 +1,30 @@
|
|||
-- PROJECT_VERSION='1.2.3.4'
|
||||
-- ProjectA_VERSION='1.2.3.4'
|
||||
-- PROJECT_VERSION_MAJOR='1'
|
||||
-- ProjectA_VERSION_MAJOR='1'
|
||||
-- PROJECT_VERSION_MINOR='2'
|
||||
-- ProjectA_VERSION_MINOR='2'
|
||||
-- PROJECT_VERSION_PATCH='3'
|
||||
-- ProjectA_VERSION_PATCH='3'
|
||||
-- PROJECT_VERSION_TWEAK='4'
|
||||
-- ProjectA_VERSION_TWEAK='4'
|
||||
-- PROJECT_VERSION='0.1.2'
|
||||
-- ProjectB_VERSION='0.1.2'
|
||||
-- PROJECT_VERSION_MAJOR='0'
|
||||
-- ProjectB_VERSION_MAJOR='0'
|
||||
-- PROJECT_VERSION_MINOR='1'
|
||||
-- ProjectB_VERSION_MINOR='1'
|
||||
-- PROJECT_VERSION_PATCH='2'
|
||||
-- ProjectB_VERSION_PATCH='2'
|
||||
-- PROJECT_VERSION_TWEAK=''
|
||||
-- ProjectB_VERSION_TWEAK=''
|
||||
-- PROJECT_VERSION=''
|
||||
-- ProjectC_VERSION=''
|
||||
-- PROJECT_VERSION_MAJOR=''
|
||||
-- ProjectC_VERSION_MAJOR=''
|
||||
-- PROJECT_VERSION_MINOR=''
|
||||
-- ProjectC_VERSION_MINOR=''
|
||||
-- PROJECT_VERSION_PATCH=''
|
||||
-- ProjectC_VERSION_PATCH=''
|
||||
-- PROJECT_VERSION_TWEAK=''
|
||||
-- ProjectC_VERSION_TWEAK=''
|
|
@ -0,0 +1,19 @@
|
|||
macro(print_versions name)
|
||||
foreach(v "" _MAJOR _MINOR _PATCH _TWEAK)
|
||||
message(STATUS "PROJECT_VERSION${v}='${PROJECT_VERSION${v}}'")
|
||||
message(STATUS "${name}_VERSION${v}='${${name}_VERSION${v}}'")
|
||||
endforeach()
|
||||
endmacro()
|
||||
|
||||
cmake_policy(SET CMP0048 NEW)
|
||||
|
||||
project(ProjectA VERSION 1.2.3.4 LANGUAGES NONE)
|
||||
print_versions(ProjectA)
|
||||
|
||||
project(ProjectB VERSION 0.1.2 LANGUAGES NONE)
|
||||
print_versions(ProjectB)
|
||||
|
||||
set(PROJECT_VERSION 1)
|
||||
set(ProjectC_VERSION 1)
|
||||
project(ProjectC NONE)
|
||||
print_versions(ProjectC)
|
|
@ -0,0 +1 @@
|
|||
1
|
|
@ -0,0 +1,4 @@
|
|||
CMake Error at CMP0048-OLD-VERSION.cmake:1 \(project\):
|
||||
VERSION not allowed unless CMP0048 is set to NEW
|
||||
Call Stack \(most recent call first\):
|
||||
CMakeLists.txt:3 \(include\)$
|
|
@ -0,0 +1,2 @@
|
|||
project(MyProject VERSION 1 LANGUAGES NONE)
|
||||
message("This line not reached.")
|
|
@ -0,0 +1,2 @@
|
|||
-- PROJECT_VERSION='1'
|
||||
-- MyProject_VERSION_TWEAK='0'
|
|
@ -0,0 +1,6 @@
|
|||
cmake_policy(SET CMP0048 OLD)
|
||||
set(PROJECT_VERSION 1)
|
||||
set(MyProject_VERSION_TWEAK 0)
|
||||
project(MyProject NONE)
|
||||
message(STATUS "PROJECT_VERSION='${PROJECT_VERSION}'")
|
||||
message(STATUS "MyProject_VERSION_TWEAK='${MyProject_VERSION_TWEAK}'")
|
|
@ -0,0 +1,12 @@
|
|||
CMake Warning \(dev\) at CMP0048-WARN.cmake:3 \(project\):
|
||||
Policy CMP0048 is not set: project\(\) command manages VERSION variables.
|
||||
Run "cmake --help-policy CMP0048" for policy details. Use the cmake_policy
|
||||
command to set the policy and suppress this warning.
|
||||
|
||||
The following variable\(s\) would be set to empty:
|
||||
|
||||
PROJECT_VERSION
|
||||
MyProject_VERSION_TWEAK
|
||||
Call Stack \(most recent call first\):
|
||||
CMakeLists.txt:3 \(include\)
|
||||
This warning is for project developers. Use -Wno-dev to suppress it.
|
|
@ -0,0 +1,3 @@
|
|||
set(PROJECT_VERSION 1)
|
||||
set(MyProject_VERSION_TWEAK 0)
|
||||
project(MyProject NONE)
|
|
@ -0,0 +1,3 @@
|
|||
cmake_minimum_required(VERSION 2.8.4)
|
||||
project(${RunCMake_TEST} NONE)
|
||||
include(${RunCMake_TEST}.cmake)
|
|
@ -0,0 +1 @@
|
|||
ENABLED_LANGUAGES='NONE'
|
|
@ -0,0 +1,3 @@
|
|||
project(ProjectA LANGUAGES)
|
||||
get_property(langs GLOBAL PROPERTY ENABLED_LANGUAGES)
|
||||
message(STATUS "ENABLED_LANGUAGES='${langs}'")
|
|
@ -0,0 +1 @@
|
|||
ENABLED_LANGUAGES='NONE'
|
|
@ -0,0 +1,3 @@
|
|||
project(ProjectA NONE)
|
||||
get_property(langs GLOBAL PROPERTY ENABLED_LANGUAGES)
|
||||
message(STATUS "ENABLED_LANGUAGES='${langs}'")
|
|
@ -0,0 +1 @@
|
|||
ENABLED_LANGUAGES='NONE'
|
|
@ -0,0 +1,3 @@
|
|||
project(ProjectA LANGUAGES NONE)
|
||||
get_property(langs GLOBAL PROPERTY ENABLED_LANGUAGES)
|
||||
message(STATUS "ENABLED_LANGUAGES='${langs}'")
|
|
@ -0,0 +1 @@
|
|||
1
|
|
@ -0,0 +1,4 @@
|
|||
CMake Error at LanguagesTwice.cmake:1 \(project\):
|
||||
LANGUAGES may be specified at most once.
|
||||
Call Stack \(most recent call first\):
|
||||
CMakeLists.txt:3 \(include\)$
|
|
@ -0,0 +1,2 @@
|
|||
project(ProjectA LANGUAGES NONE LANGUAGES)
|
||||
message("This line not reached.")
|
|
@ -0,0 +1,17 @@
|
|||
include(RunCMake)
|
||||
|
||||
run_cmake(LanguagesImplicit)
|
||||
run_cmake(LanguagesEmpty)
|
||||
run_cmake(LanguagesNONE)
|
||||
run_cmake(LanguagesTwice)
|
||||
run_cmake(VersionAndLanguagesEmpty)
|
||||
run_cmake(VersionEmpty)
|
||||
run_cmake(VersionInvalid)
|
||||
run_cmake(VersionMissingLanguages)
|
||||
run_cmake(VersionMissingValueOkay)
|
||||
run_cmake(VersionTwice)
|
||||
|
||||
run_cmake(CMP0048-OLD)
|
||||
run_cmake(CMP0048-OLD-VERSION)
|
||||
run_cmake(CMP0048-WARN)
|
||||
run_cmake(CMP0048-NEW)
|
|
@ -0,0 +1,2 @@
|
|||
-- ENABLED_LANGUAGES='NONE'
|
||||
-- PROJECT_VERSION='1'
|
|
@ -0,0 +1,5 @@
|
|||
cmake_policy(SET CMP0048 NEW)
|
||||
project(ProjectA VERSION 1 LANGUAGES NONE)
|
||||
get_property(langs GLOBAL PROPERTY ENABLED_LANGUAGES)
|
||||
message(STATUS "ENABLED_LANGUAGES='${langs}'")
|
||||
message(STATUS "PROJECT_VERSION='${PROJECT_VERSION}'")
|
|
@ -0,0 +1,2 @@
|
|||
-- ENABLED_LANGUAGES='NONE'
|
||||
-- PROJECT_VERSION=''
|
|
@ -0,0 +1,6 @@
|
|||
cmake_policy(SET CMP0048 NEW)
|
||||
set(PROJECT_VERSION 1)
|
||||
project(ProjectA VERSION "" LANGUAGES NONE)
|
||||
get_property(langs GLOBAL PROPERTY ENABLED_LANGUAGES)
|
||||
message(STATUS "ENABLED_LANGUAGES='${langs}'")
|
||||
message(STATUS "PROJECT_VERSION='${PROJECT_VERSION}'")
|
|
@ -0,0 +1 @@
|
|||
1
|
|
@ -0,0 +1,4 @@
|
|||
CMake Error at VersionInvalid.cmake:2 \(project\):
|
||||
VERSION "NONE" format invalid.
|
||||
Call Stack \(most recent call first\):
|
||||
CMakeLists.txt:3 \(include\)$
|
|
@ -0,0 +1,3 @@
|
|||
cmake_policy(SET CMP0048 NEW)
|
||||
project(ProjectA VERSION NONE)
|
||||
message("This line not reached.")
|
|
@ -0,0 +1 @@
|
|||
1
|
|
@ -0,0 +1,4 @@
|
|||
CMake Error at VersionMissingLanguages.cmake:2 \(project\):
|
||||
project with VERSION must use LANGUAGES before language names.
|
||||
Call Stack \(most recent call first\):
|
||||
CMakeLists.txt:3 \(include\)$
|
|
@ -0,0 +1,3 @@
|
|||
cmake_policy(SET CMP0048 NEW)
|
||||
project(ProjectA VERSION 1 NONE)
|
||||
message("This line not reached.")
|
|
@ -0,0 +1,2 @@
|
|||
-- ENABLED_LANGUAGES='NONE'
|
||||
-- PROJECT_VERSION=''
|
|
@ -0,0 +1,6 @@
|
|||
cmake_policy(SET CMP0048 NEW)
|
||||
set(PROJECT_VERSION 1)
|
||||
project(ProjectA VERSION LANGUAGES NONE)
|
||||
get_property(langs GLOBAL PROPERTY ENABLED_LANGUAGES)
|
||||
message(STATUS "ENABLED_LANGUAGES='${langs}'")
|
||||
message(STATUS "PROJECT_VERSION='${PROJECT_VERSION}'")
|
|
@ -0,0 +1 @@
|
|||
1
|
|
@ -0,0 +1,4 @@
|
|||
CMake Error at VersionTwice.cmake:2 \(project\):
|
||||
VERSION may be specified at most once.
|
||||
Call Stack \(most recent call first\):
|
||||
CMakeLists.txt:3 \(include\)$
|
|
@ -0,0 +1,3 @@
|
|||
cmake_policy(SET CMP0048 NEW)
|
||||
project(ProjectA VERSION 1 VERSION)
|
||||
message("This line not reached.")
|
Loading…
Reference in New Issue