CMake 3.16 เจฌเจฟเจฒเจก เจธเจฟเจธเจŸเจฎ เจฆเฉ€ เจฐเจฟเจฒเฉ€เจœเจผ

เจชเฉ‡เจธเจผ เจ•เฉ€เจคเจพ เจ‡เฉฑเจ• เจ•เจฐเจพเจธ-เจชเจฒเฉ‡เจŸเจซเจพเจฐเจฎ เจ“เจชเจจ เจฌเจฟเจฒเจก เจธเจ•เฉเจฐเจฟเจชเจŸ เจœเจจเจฐเฉ‡เจŸเจฐ เจฆเฉ€ เจฐเจฟเจฒเฉ€เจœเจผ เจธเฉ€เจเจฎเจ•เฉ‡ 3.16., เจœเฉ‹ เจ†เจŸเฉ‹เจŸเฉ‚เจฒเจœเจผ เจฆเฉ‡ เจตเจฟเจ•เจฒเจช เจตเจœเฉ‹เจ‚ เจ•เฉฐเจฎ เจ•เจฐเจฆเจพ เจนเฉˆ เจ…เจคเฉ‡ KDE, LLVM/Clang, MySQL, MariaDB, ReactOS เจ…เจคเฉ‡ Blender เจตเจฐเจ—เฉ‡ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸเจพเจ‚ เจตเจฟเฉฑเจš เจตเจฐเจคเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆเฅค CMake เจ•เฉ‹เจก C++ เจตเจฟเฉฑเจš เจฒเจฟเจ–เจฟเจ† เจ—เจฟเจ† เจนเฉˆ เจ…เจคเฉ‡ BSD เจฒเจพเจ‡เจธเฉฐเจธ เจฆเฉ‡ เจ…เจงเฉ€เจจ เจตเฉฐเจกเจฟเจ† เจ—เจฟเจ† เจนเฉˆเฅค

CMake เจ‡เฉฑเจ• เจธเจงเจพเจฐเจจ เจธเจ•เฉเจฐเจฟเจชเจŸเจฟเฉฐเจ— เจญเจพเจธเจผเจพ, เจฎเฉŒเจกเจฟเจŠเจฒเจพเจ‚ เจฐเจพเจนเฉ€เจ‚ เจ•เจพเจฐเจœเจธเจผเฉ€เจฒเจคเจพ เจจเฉ‚เฉฐ เจตเจงเจพเจ‰เจฃ เจฆเจพ เจ‡เฉฑเจ• เจธเจพเจงเจจ, เจ‡เฉฑเจ• เจ˜เฉฑเจŸเฉ‹-เจ˜เฉฑเจŸ เจจเจฟเจฐเจญเจฐเจคเจพ (M4, เจชเจฐเจฒ เจœเจพเจ‚ เจชเจพเจˆเจฅเจจ เจฒเจˆ เจ•เฉ‹เจˆ เจฌเจพเจˆเจกเจฟเฉฐเจ— เจจเจนเฉ€เจ‚), เจ•เฉˆเจšเจฟเฉฐเจ— เจธเจนเจพเจ‡เจคเจพ, เจ•เจฐเจพเจธ-เจ•เฉฐเจชเจพเจˆเจฒเฉ‡เจธเจผเจจ เจฒเจˆ เจŸเฉ‚เจฒเจธ เจฆเฉ€ เจฎเฉŒเจœเฉ‚เจฆเจ—เฉ€, เจฌเจฟเจฒเจก เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ เจธเจฎเจฐเจฅเจจ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจจ เจฒเจˆ เจชเฉเจฐเจธเจฟเฉฑเจง เจนเฉˆเฅค เจฌเจฟเจฒเจก เจธเจฟเจธเจŸเจฎเจพเจ‚ เจ…เจคเฉ‡ เจ•เฉฐเจชเจพเจˆเจฒเจฐเจพเจ‚ เจฆเฉ€ เจตเจฟเจธเจผเจพเจฒ เจธเจผเฉเจฐเฉ‡เจฃเฉ€ เจฒเจˆ เจซเจพเจˆเจฒเจพเจ‚, เจŸเฉˆเจธเจŸ เจธเจ•เฉเจฐเจฟเจชเจŸเจพเจ‚ เจ…เจคเฉ‡ เจฌเจฟเจฒเจกเจฟเฉฐเจ— เจชเฉˆเจ•เฉ‡เจœเจพเจ‚ เจจเฉ‚เฉฐ เจชเจฐเจฟเจญเจพเจธเจผเจฟเจค เจ•เจฐเจจ เจฒเจˆ เจฎเฉŒเจœเฉ‚เจฆเจ—เฉ€ ctest เจ…เจคเฉ‡ cpack เจ‰เจชเจฏเฉ‹เจ—เจคเจพเจตเจพเจ‚, เจฌเจฟเจฒเจก เจชเฉˆเจฐเจพเจฎเฉ€เจŸเจฐเจพเจ‚ เจจเฉ‚เฉฐ เจ‡เฉฐเจŸเจฐเจเจ•เจŸเจฟเจต เจขเฉฐเจ— เจจเจพเจฒ เจธเฉˆเฉฑเจŸ เจ•เจฐเจจ เจฒเจˆ cmake-gui เจ‰เจชเจฏเฉ‹เจ—เจคเจพเฅค

เจฎเฉเฉฑเจ– เจธเฉเจงเจพเจฐ:

  • เจ‰เจฆเฉ‡เจธเจผ C (โ€œOBJCโ€) เจ…เจคเฉ‡ เจ‰เจฆเฉ‡เจธเจผ เจญเจพเจธเจผเจพเจตเจพเจ‚ เจฒเจˆ เจธเจฎเจฐเจฅเจจ เจœเฉ‹เฉœเจฟเจ† เจ—เจฟเจ†
    C++ ("OBJCXX"), เจœเจฟเจธ เจจเฉ‚เฉฐ เจชเฉเจฐเฉ‹เจœเฉˆเจ•เจŸ() เจ…เจคเฉ‡ enable_language() เจ•เจฎเจพเจ‚เจกเจพเจ‚ เจฐเจพเจนเฉ€เจ‚ เจฏเฉ‹เจ— เจ•เฉ€เจคเจพ เจœเจพ เจธเจ•เจฆเจพ เจนเฉˆ, เจœเจฟเจธ เจคเฉ‹เจ‚ เจฌเจพเจ…เจฆ ".m" ".mm" เจซเจพเจˆเจฒเจพเจ‚ เจตเจฟเฉฑเจš เจ•เฉ‹เจก เจจเฉ‚เฉฐ เจ‰เจฆเฉ‡เจธเจผ C เจ…เจคเฉ‡ เจ‰เจฆเฉ‡เจธเจผ C++ เจ•เฉ‹เจก เจฆเฉ‡ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจ•เฉฐเจชเจพเจ‡เจฒ เจ•เฉ€เจคเจพ เจœเจพเจตเฉ‡เจ—เจพ, เจจเจพ เจ•เจฟ C++, เจœเจฟเจตเฉ‡เจ‚ เจ•เจฟ เจ‡เจน เจชเจนเจฟเจฒเจพเจ‚ เจธเฉ€;

  • เจธเฉ‹เจฒเจพเจฐเจฟเจธ เจชเจฒเฉ‡เจŸเจซเจพเจฐเจฎ 'เจคเฉ‡ เจ•เจฒเฉˆเจ‚เจ— เจ•เฉฐเจชเจพเจˆเจฒเจฐ เจฒเจˆ เจธเจฎเจฐเจฅเจจ เจœเฉ‹เฉœเจฟเจ† เจ—เจฟเจ†;
  • เจจเจตเฉ‡เจ‚ เจ•เจฎเจพเจ‚เจก เจฒเจพเจˆเจจ เจตเจฟเจ•เจฒเจช เจธเจผเจพเจฎเจฒ เจ•เฉ€เจคเฉ‡ เจ—เจ: เจฐเจฟเจŸเจฐเจจ เจ•เฉ‹เจก 0 เจ…เจคเฉ‡ 1 เจจเฉ‚เฉฐ เจชเฉเจฐเจฟเฉฐเจŸ เจ•เจฐเจจ เจฒเจˆ โ€œcmake -E true|falseโ€; "cmake --trace-redirect=" เจจเฉ‚เฉฐ เจŸเจฐเฉ‡เจธ เจœเจพเจฃเจ•เจพเจฐเฉ€ เจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจซเจพเจˆเจฒ เจตเจฟเฉฑเจš เจฐเฉ€เจกเจพเจ‡เจฐเฉˆเจ•เจŸ เจ•เจฐเจจ เจฒเจˆ
    "stderr"; "cmake --loglevel" เจ•เจฎเจพเจ‚เจก เจฆเจพ เจจเจพเจ‚ เจฌเจฆเจฒ เจ•เฉ‡ "--log-level" เจ•เจฐ เจฆเจฟเฉฑเจคเจพ เจ—เจฟเจ† เจนเฉˆ เจคเจพเจ‚ เจœเฉ‹ เจ‡เจธเจจเฉ‚เฉฐ เจนเฉ‹เจฐ เจ•เจฎเจพเจ‚เจกเจพเจ‚ เจฆเฉ‡ เจจเจพเจตเจพเจ‚ เจจเจพเจฒ เจœเฉ‹เฉœเจฟเจ† เจœเจพ เจธเจ•เฉ‡;

  • เจชเฉเจฐเฉ€-เจ•เฉฐเจชเจพเจˆเจฒเฉ‡เจธเจผเจจ เจฆเฉŒเจฐเจพเจจ เจตเจฐเจคเฉ€เจ†เจ‚ เจ—เจˆเจ†เจ‚ เจนเฉˆเจกเจฐ เจซเจพเจˆเจฒเจพเจ‚ เจฆเฉ€ เจธเฉ‚เจšเฉ€ เจฌเจฃเจพเจ‰เจฃ เจฒเจˆ "target_precompile_headers()" เจ•เจฎเจพเจ‚เจก เจธเจผเจพเจฎเจฒ เจ•เฉ€เจคเฉ€ เจ—เจˆ (เจฌเจฟเจฒเจก เจŸเจพเจˆเจฎ เจ˜เจŸเจพเจ‰เจ‚เจฆเจพ เจนเฉˆ);
  • "UNITY_BUILD" เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพ เจธเจผเจพเจฎเจฒ เจ•เฉ€เจคเฉ€ เจ—เจˆ, เจœเฉ‹ เจฌเจฟเจฒเจก เจจเฉ‚เฉฐ เจคเฉ‡เจœเจผ เจ•เจฐเจจ เจฒเจˆ เจœเจจเจฐเฉ‡เจŸเจฐเจพเจ‚ เจตเจฟเฉฑเจš เจธเจฐเฉ‹เจค เจซเจพเจˆเจฒเจพเจ‚ เจฆเฉ€ เจชเฉเจฐเจ•เจฟเจฐเจฟเจ† เจ•เจฐเจจ เจฒเจˆ เจฌเฉˆเจš เจฎเฉ‹เจก เจจเฉ‚เฉฐ เจธเจฐเจ—เจฐเจฎ เจ•เจฐเจฆเฉ€ เจนเฉˆ;
  • เจœเฉ‹เฉœเฉ€เจ†เจ‚ เจ—เจˆเจ†เจ‚ เจ•เจฎเจพเจ‚เจกเจพเจ‚ โ€œfind_file()โ€, โ€œfind_library()โ€, โ€œfind_path()โ€,
    "find_package()" เจ…เจคเฉ‡ "find_program()" เจซเจพเจˆเจฒเจพเจ‚, เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€เจ†เจ‚, เจฎเจพเจฐเจ—เจพเจ‚, เจชเฉˆเจ•เฉ‡เจœเจพเจ‚ เจ…เจคเฉ‡ เจเจ—เจœเจผเฉ€เจ•เจฟเจŠเจŸเฉ‡เจฌเจฒเจพเจ‚ เจจเฉ‚เฉฐ เจตเฉ‡เจฐเฉ€เจเจฌเจฒเจพเจ‚ เจฆเฉ‡ เจ…เจจเฉเจธเจพเจฐ เจ–เฉ‹เจœเจฃ เจฒเจˆ เจœเฉ‹ เจซเจพเจˆเจฒเจพเจ‚ เจฆเฉ€เจ†เจ‚ เจตเฉฑเจ–-เจตเฉฑเจ– เจธเจผเฉเจฐเฉ‡เจฃเฉ€เจ†เจ‚ เจฒเจˆ เจ–เฉ‹เจœ เจฎเจพเจฐเจ— เจชเจฐเจฟเจญเจพเจธเจผเจฟเจค เจ•เจฐเจฆเฉ‡ เจนเจจเฅค
    เจตเฉ‡เจฐเฉ€เจเจฌเจฒ "CMAKE_FIND_USE_CMAKE_ENVIRONMENT_PATH", "CMAKE_FIND_USE_CMAKE_PATH", "CMAKE_FIND_USE_CMAKE_SYSTEM_PATH", "CMAKE_FIND_USE_PACKAGE_ROOT_PATH_PATH_PATHENCMAKE_PATH" เจ…เจคเฉ‡ "" MAKE_FIND_USE_PACKAGE_REGIST" เจ…เจงเจพเจฐ เจ–เฉ‹เจœ เจฎเจพเจฐเจ—เจพเจ‚ เจจเฉ‚เฉฐ เจ•เฉฐเจŸเจฐเฉ‹เจฒ เจ•เจฐเจจ เจฒเจˆ เจตเจฐเจคเจฟเจ† เจœเจพเจ‚เจฆเจพ เจนเฉˆ RY";

  • โ€œfile()โ€ เจ•เจฎเจพเจ‚เจก เจตเจฟเฉฑเจš โ€œfile(GET_RUNTIME_DEPENDENCIES)โ€ เจฎเฉ‹เจก เจธเจผเจพเจฎเจฒ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ, เจœเฉ‹ เจคเฉเจนเจพเจจเฉ‚เฉฐ เจ‡เฉฑเจ• เจเจ—เจœเจผเฉ€เจ•เจฟเจŠเจŸเฉ‡เจฌเจฒ เจซเจพเจˆเจฒ เจœเจพเจ‚ เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€ เจจเฉ‚เฉฐ เจ—เจคเฉ€เจธเจผเฉ€เจฒ เจฐเฉ‚เจช เจตเจฟเฉฑเจš เจฒเจฟเฉฐเจ• เจ•เจฐเจจ เจตเฉ‡เจฒเฉ‡ เจตเจฐเจคเฉ€เจ†เจ‚ เจ—เจˆเจ†เจ‚ เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€เจ†เจ‚ เจฆเฉ€ เจธเฉ‚เจšเฉ€ เจจเฉ‚เฉฐ เจฎเฉเฉœ-เจชเฉเจฐเจพเจชเจค เจ•เจฐเจจ เจฆเฉ€ เจ‡เจœเจพเจœเจผเจค เจฆเจฟเฉฐเจฆเจพ เจนเฉˆเฅค เจฎเฉ‹เจก เจจเฉ‡ GetPrerequisites() เจ•เจฎเจพเจ‚เจก เจจเฉ‚เฉฐ เจฌเจฆเจฒ เจฆเจฟเฉฑเจคเจพ เจนเฉˆ, เจœเจฟเจธ เจจเฉ‚เฉฐ เจนเฉเจฃ เจฌเจฐเจคเจฐเจซเจผ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ;
  • โ€œctest(1)โ€ เจ•เจฎเจพเจ‚เจก เจนเจฐเฉ‡เจ• เจŸเฉˆเจธเจŸ เจฒเจˆ เจฒเฉ‹เฉœเฉ€เจ‚เจฆเฉ‡ เจธเจฐเฉ‹เจคเจพเจ‚ เจฆเฉ‡ เจ…เจงเจพเจฐ เจคเฉ‡ เจŸเฉˆเจธเจŸเจพเจ‚ เจจเฉ‚เฉฐ เจฒเฉœเฉ€เจฌเฉฑเจง เจ•เจฐเจจ เจฆเฉ€ เจฏเฉ‹เจ—เจคเจพ เจจเฉ‚เฉฐ เจฒเจพเจ—เฉ‚ เจ•เจฐเจฆเฉ€ เจนเฉˆ;
  • เจตเฉ‡เจฐเฉ€เจเจฌเจฒ "CMAKE_FIND_PACKAGE_NO_PACKAGE_REGISTRY" เจจเฉ‚เฉฐ เจฌเจฐเจคเจฐเจซเจผ เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆ เจ…เจคเฉ‡ เจ‡เจธเจจเฉ‚เฉฐ "CMAKE_FIND_USE_PACKAGE_REGISTRY" เจจเจพเจฒ เจฌเจฆเจฒเจฟเจ† เจœเจพเจฃเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ;
  • เจธเฉเจงเจพเจฐเจฟเจ† เจ—เจฟเจ† AIX เจชเจฒเฉ‡เจŸเจซเจพเจฐเจฎ เจธเจฎเจฐเจฅเจจเฅค "ENABLE_EXPORTS" เจตเจฟเจธเจผเฉ‡เจธเจผเจคเจพ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจฆเฉ‡ เจธเจฎเฉ‡เจ‚, เจเจ—เจœเจผเฉ€เจ•เจฟเจŠเจŸเฉ‡เจฌเจฒ เจซเจพเจˆเจฒ เจคเฉ‹เจ‚ เจ‡เจฒเจพเจตเจพ, เจฒเจฟเฉฐเจ•เจฐ เจฒเจˆ เจ‡เฉฑเจ• เจ†เจฏเจพเจค เจซเจพเจˆเจฒ เจนเฉเจฃ เจคเจฟเจ†เจฐ เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆ, ".imp" เจเจ•เจธเจŸเฉˆเจ‚เจธเจผเจจ เจจเจพเจฒ เจธเฉเจฐเฉฑเจ–เจฟเจ…เจค เจ•เฉ€เจคเฉ€ เจœเจพเจ‚เจฆเฉ€ เจนเฉˆเฅค "MODULE" เจตเจฟเจ•เจฒเจช เจจเจพเจฒ "add_library()" เจจเฉ‚เฉฐ เจ•เจพเจฒ เจ•เจฐเจ•เฉ‡ เจฌเจฃเจพเจ เจชเจฒเฉฑเจ—เจ‡เจจเจพเจ‚ เจตเจฟเฉฑเจš, "target_link_libraries()" เจ•เจฎเจพเจ‚เจก เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจ•เฉ‡ เจฒเจฟเฉฐเจ• เจ•เจฐเจจ เจตเฉ‡เจฒเฉ‡ เจ‡เจธ เจซเจผเจพเจˆเจฒ เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เฉ€เจคเฉ€ เจœเจพ เจธเจ•เจฆเฉ€ เจนเฉˆเฅค AIX 'เจคเฉ‡ เจฐเจจเจŸเจพเจˆเจฎ เจฒเจฟเฉฐเจ• เจ•เจฐเจจเจพ เจกเจฟเจซเฉŒเจฒเจŸ เจคเฉŒเจฐ 'เจคเฉ‡ เจ…เจธเจฎเจฐเฉฑเจฅ เจนเฉˆ เจ•เจฟเจ‰เจ‚เจ•เจฟ CMake เจนเฉเจฃ เจฒเฉ‹เจก เจธเจฎเฉ‡เจ‚ 'เจคเฉ‡ เจฒเจฟเฉฐเจ• เจ•เจฐเจจ เจฒเจˆ เจธเจพเจฐเฉ€เจ†เจ‚ เจœเจผเจฐเฉ‚เจฐเฉ€ เจšเจฟเฉฐเจจเฉเจน เจœเจพเจฃเจ•เจพเจฐเฉ€ เจชเฉเจฐเจฆเจพเจจ เจ•เจฐเจฆเจพ เจนเฉˆเฅค เจกเจพเจ‡เจจเจพเจฎเจฟเจ• เจฒเจพเจ‡เจฌเฉเจฐเฉ‡เจฐเฉ€เจ†เจ‚ เจœเจพเจ‚ เจฒเฉ‹เจก เจนเฉ‹เจฃ เจฏเฉ‹เจ— เจฎเฉŒเจกเจฟเจŠเจฒเจพเจ‚ เจฆเฉ€ เจฐเจจเจŸเจพเจˆเจฎ เจฒเจฟเฉฐเจ•เจฟเฉฐเจ— เจฆเฉ€ เจตเจฐเจคเฉ‹เจ‚ เจ•เจฐเจจ เจฒเจˆ, เจคเฉเจนเจพเจจเฉ‚เฉฐ เจฒเจฟเฉฐเจ•เจฐ เจธเจŸเจพเจฐเจŸเจ…เฉฑเจช เจซเจฒเฉˆเจ—เจพเจ‚ เจฆเฉ€เจ†เจ‚ เจธเฉ‚เจšเฉ€เจ†เจ‚ เจตเจฟเฉฑเจš "-Wl, -G" เจตเจฟเจ•เจฒเจชเจพเจ‚ เจจเฉ‚เฉฐ เจธเจชเจธเจผเจŸ เจคเฉŒเจฐ 'เจคเฉ‡ เจจเจฟเจฐเจงเจพเจฐเจค เจ•เจฐเจจเจพ เจšเจพเจนเฉ€เจฆเจพ เจนเฉˆ, "CMAKE_SHARED_LINKER_FLAGS" เจ…เจคเฉ‡ "CMAKE_MODULE_LINKER_FLAGS" เจตเฉ‡เจฐเฉ€เจเจฌเจฒเจพเจ‚ เจฆเฉเจ†เจฐเจพ เจชเจฐเจฟเจญเจพเจธเจผเจฟเจค เจ•เฉ€เจคเจพ เจ—เจฟเจ† เจนเฉˆเฅค

เจธเจฐเฉ‹เจค: opennet.ru

เจ‡เฉฑเจ• เจŸเจฟเฉฑเจชเจฃเฉ€ เจœเฉ‹เฉœเฉ‹