cmTargetLinkDirectoriesCommand.cxx 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
  2. file Copyright.txt or https://cmake.org/licensing for details. */
  3. #include "cmTargetLinkDirectoriesCommand.h"
  4. #include "cmGeneratorExpression.h"
  5. #include "cmListFileCache.h"
  6. #include "cmMakefile.h"
  7. #include "cmMessageType.h"
  8. #include "cmStringAlgorithms.h"
  9. #include "cmSystemTools.h"
  10. #include "cmTarget.h"
  11. class cmExecutionStatus;
  12. bool cmTargetLinkDirectoriesCommand::InitialPass(
  13. std::vector<std::string> const& args, cmExecutionStatus&)
  14. {
  15. return this->HandleArguments(args, "LINK_DIRECTORIES", PROCESS_BEFORE);
  16. }
  17. void cmTargetLinkDirectoriesCommand::HandleMissingTarget(
  18. const std::string& name)
  19. {
  20. this->Makefile->IssueMessage(
  21. MessageType::FATAL_ERROR,
  22. cmStrCat("Cannot specify link directories for target \"", name,
  23. "\" which is not built by this project."));
  24. }
  25. std::string cmTargetLinkDirectoriesCommand::Join(
  26. const std::vector<std::string>& content)
  27. {
  28. std::vector<std::string> directories;
  29. for (const auto& dir : content) {
  30. auto unixPath = dir;
  31. cmSystemTools::ConvertToUnixSlashes(unixPath);
  32. if (!cmSystemTools::FileIsFullPath(unixPath) &&
  33. !cmGeneratorExpression::StartsWithGeneratorExpression(unixPath)) {
  34. auto tmp = this->Makefile->GetCurrentSourceDirectory();
  35. tmp += "/";
  36. tmp += unixPath;
  37. unixPath = tmp;
  38. }
  39. directories.push_back(unixPath);
  40. }
  41. return cmJoin(directories, ";");
  42. }
  43. bool cmTargetLinkDirectoriesCommand::HandleDirectContent(
  44. cmTarget* tgt, const std::vector<std::string>& content, bool prepend, bool)
  45. {
  46. cmListFileBacktrace lfbt = this->Makefile->GetBacktrace();
  47. tgt->InsertLinkDirectory(this->Join(content), lfbt, prepend);
  48. return true; // Successfully handled.
  49. }