Error if linked target has relative paths in INTERFACE_INCLUDE_DIRECTORIES

We can do this check only if the TargetName is non-empty, which means
that we're evaluating INTERFACE_INCLUDE_DIRECTORIES from a linked
dependency which was set using target_link_libraries.

It is possible to have relative paths in INCLUDE_DIRECTORIES already
in CMake 2.8.10.2, so that part will require a policy to fix.
This commit is contained in:
Stephen Kelly 2013-03-26 18:08:26 +01:00
parent 28051f1150
commit 634bb33f3a
5 changed files with 29 additions and 0 deletions

View File

@ -2842,6 +2842,20 @@ static void processIncludeDirectories(cmTarget *tgt,
return; return;
} }
if (!cmSystemTools::FileIsFullPath(li->c_str()))
{
if (!(*it)->TargetName.empty())
{
cmOStringStream e;
e << "Target \"" << (*it)->TargetName << "\" contains relative "
"path in its INTERFACE_INCLUDE_DIRECTORIES:\n"
" \"" << *li << "\" ";
tgt->GetMakefile()->IssueMessage(cmake::FATAL_ERROR,
e.str().c_str());
return;
}
}
if (testIsOff && !cmSystemTools::IsOff(li->c_str())) if (testIsOff && !cmSystemTools::IsOff(li->c_str()))
{ {
cmSystemTools::ConvertToUnixSlashes(*li); cmSystemTools::ConvertToUnixSlashes(*li);

View File

@ -0,0 +1,5 @@
CMake Error in CMakeLists.txt:
Target "testTarget" contains relative path in its
INTERFACE_INCLUDE_DIRECTORIES:
"foo"

View File

@ -0,0 +1,8 @@
project(RelativePathInInterface)
add_library(testTarget "${CMAKE_CURRENT_SOURCE_DIR}/empty.cpp")
set_property(TARGET testTarget PROPERTY INTERFACE_INCLUDE_DIRECTORIES "$<1:foo>")
add_library(userTarget "${CMAKE_CURRENT_SOURCE_DIR}/empty.cpp")
target_link_libraries(userTarget testTarget)

View File

@ -7,3 +7,4 @@ run_cmake(SourceDirectoryInInterface)
run_cmake(BinaryDirectoryInInterface) run_cmake(BinaryDirectoryInInterface)
run_cmake(RelativePathInInterface) run_cmake(RelativePathInInterface)
run_cmake(ImportedTarget) run_cmake(ImportedTarget)
run_cmake(RelativePathInGenex)