ENH: print a warning if ADD_LIBRARY( SHARED/MODULE ) is used and the target

platform doesn't support shared libraries

Alex
This commit is contained in:
Alexander Neundorf 2007-06-21 16:23:54 -04:00
parent 7f1fbe4e4c
commit 1383368628
3 changed files with 23 additions and 0 deletions

View File

@ -19,6 +19,9 @@ SET(CMAKE_DL_LIBS "dl")
SET(CMAKE_FIND_LIBRARY_PREFIXES "lib") SET(CMAKE_FIND_LIBRARY_PREFIXES "lib")
SET(CMAKE_FIND_LIBRARY_SUFFIXES ".so" ".a") SET(CMAKE_FIND_LIBRARY_SUFFIXES ".so" ".a")
# basically all general purpose OSs support shared libs
SET(CMAKE_TARGET_SUPPORTS_ONLY_STATIC_LIBS FALSE)
SET (CMAKE_SKIP_RPATH "NO" CACHE BOOL SET (CMAKE_SKIP_RPATH "NO" CACHE BOOL
"If set, runtime paths are not added when using shared libraries.") "If set, runtime paths are not added when using shared libraries.")

View File

@ -6,3 +6,7 @@
# about the platform. So everything has to be specified # about the platform. So everything has to be specified
# in the system/compiler files ${CMAKE_SYSTEM_NAME}-<compiler_basename>.cmake # in the system/compiler files ${CMAKE_SYSTEM_NAME}-<compiler_basename>.cmake
# and/or ${CMAKE_SYSTEM_NAME}-<compiler_basename>-${CMAKE_SYSTEM_PROCESSOR}.cmake # and/or ${CMAKE_SYSTEM_NAME}-<compiler_basename>-${CMAKE_SYSTEM_PROCESSOR}.cmake
# (embedded) targets without operating system usually don't support shared libraries
SET(CMAKE_TARGET_SUPPORTS_ONLY_STATIC_LIBS TRUE)

View File

@ -77,6 +77,22 @@ bool cmAddLibraryCommand::InitialPass(std::vector<std::string> const& args)
cmSystemTools::Message(msg.c_str() ,"Warning"); cmSystemTools::Message(msg.c_str() ,"Warning");
} }
/* ideally we should check whether for the linker language of the target
CMAKE_${LANG}_CREATE_SHARED_LIBRARY is defined and if not default to
STATIC. But at this point we know only the name of the target, but not
yet its linker language. */
if ((shared != 0) &&
(this->Makefile->IsOn("CMAKE_TARGET_SUPPORTS_ONLY_STATIC_LIBS")))
{
std::string msg = "ADD_LIBRARY for library ";
msg += args[0];
msg += " is used with the SHARED or MODULE option, but the target "
"platform supports only STATIC libraries. Building it STATIC instead. "
"This may lead to problems.";
cmSystemTools::Message(msg.c_str() ,"Warning");
shared = 0;
}
std::vector<std::string> srclists; std::vector<std::string> srclists;
while (s != args.end()) while (s != args.end())
{ {