Browse Source

Help: Revise buildsystem artifact file type documentation (#15539)

Add sections to the cmake-buildsystem(7) manual and cross-reference
them with relevant variables and target properties.  This avoids
duplicating the information and allows it to be more detailed.
Brad King 10 năm trước cách đây
mục cha
commit
d401aa21c9

+ 69 - 2
Help/manual/cmake-buildsystem.7.rst

@@ -695,8 +695,10 @@ edge of linking ``exe1`` is determined by the same
 :prop_tgt:`POSITION_INDEPENDENT_CODE` property, the dependency graph above
 contains a cycle.  :manual:`cmake(1)` issues a diagnostic in this case.
 
-Output Files
-------------
+.. _`Output Artifacts`:
+
+Output Artifacts
+----------------
 
 The buildsystem targets created by the :command:`add_library` and
 :command:`add_executable` commands create rules to create binary outputs.
@@ -708,6 +710,71 @@ name and location of generated binaries.  These expressions do not work
 for ``OBJECT`` libraries however, as there is no single file generated
 by such libraries which is relevant to the expressions.
 
+There are three kinds of output artifacts that may be build by targets
+as detailed in the following sections.  Their classification differs
+between DLL platforms and non-DLL platforms.  All Windows-based
+systems including Cygwin are DLL platforms.
+
+.. _`Runtime Output Artifacts`:
+
+Runtime Output Artifacts
+^^^^^^^^^^^^^^^^^^^^^^^^
+
+A *runtime* output artifact of a buildsystem target may be:
+
+* The executable file (e.g. ``.exe``) of an executable target
+  created by the :command:`add_executable` command.
+
+* On DLL platforms: the executable file (e.g. ``.dll``) of a shared
+  library target created by the :command:`add_library` command
+  with the ``SHARED`` option.
+
+The :prop_tgt:`RUNTIME_OUTPUT_DIRECTORY` and :prop_tgt:`RUNTIME_OUTPUT_NAME`
+target properties may be used to control runtime output artifact locations
+and names in the build tree.
+
+.. _`Library Output Artifacts`:
+
+Library Output Artifacts
+^^^^^^^^^^^^^^^^^^^^^^^^
+
+A *library* output artifact of a buildsystem target may be:
+
+* The loadable module file (e.g. ``.dll`` or ``.so``) of a module
+  library target created by the :command:`add_library` command
+  with the ``MODULE`` option.
+
+* On non-DLL platforms: the shared library file (e.g. ``.so`` or ``.dylib``)
+  of a shared shared library target created by the :command:`add_library`
+  command with the ``SHARED`` option.
+
+The :prop_tgt:`LIBRARY_OUTPUT_DIRECTORY` and :prop_tgt:`LIBRARY_OUTPUT_NAME`
+target properties may be used to control library output artifact locations
+and names in the build tree.
+
+.. _`Archive Output Artifacts`:
+
+Archive Output Artifacts
+^^^^^^^^^^^^^^^^^^^^^^^^
+
+An *archive* output artifact of a buildsystem target may be:
+
+* The static library file (e.g. ``.lib`` or ``.a``) of a static
+  library target created by the :command:`add_library` command
+  with the ``STATIC`` option.
+
+* On DLL platforms: the import library file (e.g. ``.lib``) of a shared
+  library target created by the :command:`add_library` command
+  with the ``SHARED`` option.
+
+* On DLL platforms: the import library file (e.g. ``.lib``) of an
+  executable target created by the :command:`add_executable` command
+  when its :prop_tgt:`ENABLE_EXPORTS` target property is set.
+
+The :prop_tgt:`ARCHIVE_OUTPUT_DIRECTORY` and :prop_tgt:`ARCHIVE_OUTPUT_NAME`
+target properties may be used to control archive output artifact locations
+and names in the build tree.
+
 Directory-Scoped Commands
 -------------------------
 

+ 3 - 0
Help/manual/cmake-variables.7.rst

@@ -213,6 +213,7 @@ Variables that Control the Build
    /variable/CMAKE_ANDROID_API_MIN
    /variable/CMAKE_ANDROID_GUI
    /variable/CMAKE_ARCHIVE_OUTPUT_DIRECTORY
+   /variable/CMAKE_ARCHIVE_OUTPUT_DIRECTORY_CONFIG
    /variable/CMAKE_AUTOMOC_MOC_OPTIONS
    /variable/CMAKE_AUTOMOC
    /variable/CMAKE_AUTORCC
@@ -236,6 +237,7 @@ Variables that Control the Build
    /variable/CMAKE_INSTALL_RPATH_USE_LINK_PATH
    /variable/CMAKE_LANG_VISIBILITY_PRESET
    /variable/CMAKE_LIBRARY_OUTPUT_DIRECTORY
+   /variable/CMAKE_LIBRARY_OUTPUT_DIRECTORY_CONFIG
    /variable/CMAKE_LIBRARY_PATH_FLAG
    /variable/CMAKE_LINK_DEF_FILE_FLAG
    /variable/CMAKE_LINK_DEPENDS_NO_SHARED
@@ -256,6 +258,7 @@ Variables that Control the Build
    /variable/CMAKE_PDB_OUTPUT_DIRECTORY_CONFIG
    /variable/CMAKE_POSITION_INDEPENDENT_CODE
    /variable/CMAKE_RUNTIME_OUTPUT_DIRECTORY
+   /variable/CMAKE_RUNTIME_OUTPUT_DIRECTORY_CONFIG
    /variable/CMAKE_SHARED_LINKER_FLAGS_CONFIG
    /variable/CMAKE_SHARED_LINKER_FLAGS
    /variable/CMAKE_SKIP_BUILD_RPATH

+ 3 - 1
Help/prop_tgt/ARCHIVE_OUTPUT_DIRECTORY.rst

@@ -1,7 +1,9 @@
 ARCHIVE_OUTPUT_DIRECTORY
 ------------------------
 
-.. |XXX| replace:: ARCHIVE
+.. |XXX| replace:: :ref:`ARCHIVE <Archive Output Artifacts>`
 .. |xxx| replace:: archive
 .. |CMAKE_XXX_OUTPUT_DIRECTORY| replace:: CMAKE_ARCHIVE_OUTPUT_DIRECTORY
 .. include:: XXX_OUTPUT_DIRECTORY.txt
+
+See also the :prop_tgt:`ARCHIVE_OUTPUT_DIRECTORY_<CONFIG>` target property.

+ 7 - 5
Help/prop_tgt/ARCHIVE_OUTPUT_DIRECTORY_CONFIG.rst

@@ -1,11 +1,13 @@
 ARCHIVE_OUTPUT_DIRECTORY_<CONFIG>
 ---------------------------------
 
-Per-configuration output directory for ARCHIVE target files.
+Per-configuration output directory for
+:ref:`ARCHIVE <Archive Output Artifacts>` target files.
 
-This is a per-configuration version of ARCHIVE_OUTPUT_DIRECTORY, but
+This is a per-configuration version of the
+:prop_tgt:`ARCHIVE_OUTPUT_DIRECTORY` target property, but
 multi-configuration generators (VS, Xcode) do NOT append a
 per-configuration subdirectory to the specified directory.  This
-property is initialized by the value of the variable
-CMAKE_ARCHIVE_OUTPUT_DIRECTORY_<CONFIG> if it is set when a target is
-created.
+property is initialized by the value of the
+:variable:`CMAKE_ARCHIVE_OUTPUT_DIRECTORY_<CONFIG>` variable if
+it is set when a target is created.

+ 3 - 1
Help/prop_tgt/ARCHIVE_OUTPUT_NAME.rst

@@ -1,6 +1,8 @@
 ARCHIVE_OUTPUT_NAME
 -------------------
 
-.. |XXX| replace:: ARCHIVE
+.. |XXX| replace:: :ref:`ARCHIVE <Archive Output Artifacts>`
 .. |xxx| replace:: archive
 .. include:: XXX_OUTPUT_NAME.txt
+
+See also the :prop_tgt:`ARCHIVE_OUTPUT_NAME_<CONFIG>` target property.

+ 4 - 2
Help/prop_tgt/ARCHIVE_OUTPUT_NAME_CONFIG.rst

@@ -1,6 +1,8 @@
 ARCHIVE_OUTPUT_NAME_<CONFIG>
 ----------------------------
 
-Per-configuration output name for ARCHIVE target files.
+Per-configuration output name for
+:ref:`ARCHIVE <Archive Output Artifacts>` target files.
 
-This is the configuration-specific version of ARCHIVE_OUTPUT_NAME.
+This is the configuration-specific version of the
+:prop_tgt:`ARCHIVE_OUTPUT_NAME` target property.

+ 3 - 1
Help/prop_tgt/LIBRARY_OUTPUT_DIRECTORY.rst

@@ -1,7 +1,9 @@
 LIBRARY_OUTPUT_DIRECTORY
 ------------------------
 
-.. |XXX| replace:: LIBRARY
+.. |XXX| replace:: :ref:`LIBRARY <Library Output Artifacts>`
 .. |xxx| replace:: library
 .. |CMAKE_XXX_OUTPUT_DIRECTORY| replace:: CMAKE_LIBRARY_OUTPUT_DIRECTORY
 .. include:: XXX_OUTPUT_DIRECTORY.txt
+
+See also the :prop_tgt:`LIBRARY_OUTPUT_DIRECTORY_<CONFIG>` target property.

+ 7 - 5
Help/prop_tgt/LIBRARY_OUTPUT_DIRECTORY_CONFIG.rst

@@ -1,11 +1,13 @@
 LIBRARY_OUTPUT_DIRECTORY_<CONFIG>
 ---------------------------------
 
-Per-configuration output directory for LIBRARY target files.
+Per-configuration output directory for
+:ref:`LIBRARY <Library Output Artifacts>` target files.
 
-This is a per-configuration version of LIBRARY_OUTPUT_DIRECTORY, but
+This is a per-configuration version of the
+:prop_tgt:`LIBRARY_OUTPUT_DIRECTORY` target property, but
 multi-configuration generators (VS, Xcode) do NOT append a
 per-configuration subdirectory to the specified directory.  This
-property is initialized by the value of the variable
-CMAKE_LIBRARY_OUTPUT_DIRECTORY_<CONFIG> if it is set when a target is
-created.
+property is initialized by the value of the
+:variable:`CMAKE_LIBRARY_OUTPUT_DIRECTORY_<CONFIG>` variable if
+it is set when a target is created.

+ 3 - 1
Help/prop_tgt/LIBRARY_OUTPUT_NAME.rst

@@ -1,6 +1,8 @@
 LIBRARY_OUTPUT_NAME
 -------------------
 
-.. |XXX| replace:: LIBRARY
+.. |XXX| replace:: :ref:`LIBRARY <Library Output Artifacts>`
 .. |xxx| replace:: library
 .. include:: XXX_OUTPUT_NAME.txt
+
+See also the :prop_tgt:`LIBRARY_OUTPUT_NAME_<CONFIG>` target property.

+ 4 - 2
Help/prop_tgt/LIBRARY_OUTPUT_NAME_CONFIG.rst

@@ -1,6 +1,8 @@
 LIBRARY_OUTPUT_NAME_<CONFIG>
 ----------------------------
 
-Per-configuration output name for LIBRARY target files.
+Per-configuration output name for
+:ref:`LIBRARY <Library Output Artifacts>` target files.
 
-This is the configuration-specific version of LIBRARY_OUTPUT_NAME.
+This is the configuration-specific version of the
+:prop_tgt:`LIBRARY_OUTPUT_NAME` target property.

+ 3 - 1
Help/prop_tgt/RUNTIME_OUTPUT_DIRECTORY.rst

@@ -1,7 +1,9 @@
 RUNTIME_OUTPUT_DIRECTORY
 ------------------------
 
-.. |XXX| replace:: RUNTIME
+.. |XXX| replace:: :ref:`RUNTIME <Runtime Output Artifacts>`
 .. |xxx| replace:: runtime
 .. |CMAKE_XXX_OUTPUT_DIRECTORY| replace:: CMAKE_RUNTIME_OUTPUT_DIRECTORY
 .. include:: XXX_OUTPUT_DIRECTORY.txt
+
+See also the :prop_tgt:`RUNTIME_OUTPUT_DIRECTORY_<CONFIG>` target property.

+ 7 - 5
Help/prop_tgt/RUNTIME_OUTPUT_DIRECTORY_CONFIG.rst

@@ -1,11 +1,13 @@
 RUNTIME_OUTPUT_DIRECTORY_<CONFIG>
 ---------------------------------
 
-Per-configuration output directory for RUNTIME target files.
+Per-configuration output directory for
+:ref:`RUNTIME <Runtime Output Artifacts>` target files.
 
-This is a per-configuration version of RUNTIME_OUTPUT_DIRECTORY, but
+This is a per-configuration version of the
+:prop_tgt:`RUNTIME_OUTPUT_DIRECTORY` target property, but
 multi-configuration generators (VS, Xcode) do NOT append a
 per-configuration subdirectory to the specified directory.  This
-property is initialized by the value of the variable
-CMAKE_RUNTIME_OUTPUT_DIRECTORY_<CONFIG> if it is set when a target is
-created.
+property is initialized by the value of the
+:variable:`CMAKE_RUNTIME_OUTPUT_DIRECTORY_<CONFIG>` variable if
+it is set when a target is created.

+ 3 - 1
Help/prop_tgt/RUNTIME_OUTPUT_NAME.rst

@@ -1,6 +1,8 @@
 RUNTIME_OUTPUT_NAME
 -------------------
 
-.. |XXX| replace:: RUNTIME
+.. |XXX| replace:: :ref:`RUNTIME <Runtime Output Artifacts>`
 .. |xxx| replace:: runtime
 .. include:: XXX_OUTPUT_NAME.txt
+
+See also the :prop_tgt:`RUNTIME_OUTPUT_NAME_<CONFIG>` target property.

+ 4 - 2
Help/prop_tgt/RUNTIME_OUTPUT_NAME_CONFIG.rst

@@ -1,6 +1,8 @@
 RUNTIME_OUTPUT_NAME_<CONFIG>
 ----------------------------
 
-Per-configuration output name for RUNTIME target files.
+Per-configuration output name for
+:ref:`RUNTIME <Runtime Output Artifacts>` target files.
 
-This is the configuration-specific version of RUNTIME_OUTPUT_NAME.
+This is the configuration-specific version of the
+:prop_tgt:`RUNTIME_OUTPUT_NAME` target property.

+ 0 - 9
Help/prop_tgt/TARGET_FILE_TYPES.txt

@@ -1,9 +0,0 @@
-There are three kinds of target files that may be built: archive,
-library, and runtime.  Executables are always treated as runtime
-targets.  Static libraries are always treated as archive targets.
-Module libraries are always treated as library targets.  For
-non-DLL platforms shared libraries are treated as library
-targets.  For DLL platforms the DLL part of a shared library is
-treated as a runtime target and the corresponding import library
-is treated as an archive target.  All Windows-based systems
-including Cygwin are DLL platforms.

+ 0 - 2
Help/prop_tgt/XXX_OUTPUT_DIRECTORY.txt

@@ -4,7 +4,5 @@ This property specifies the directory into which |xxx| target files
 should be built.  Multi-configuration generators (VS, Xcode) append a
 per-configuration subdirectory to the specified directory.
 
-.. include:: TARGET_FILE_TYPES.txt
-
 This property is initialized by the value of the variable
 |CMAKE_XXX_OUTPUT_DIRECTORY| if it is set when a target is created.

+ 2 - 3
Help/prop_tgt/XXX_OUTPUT_NAME.txt

@@ -1,6 +1,5 @@
 Output name for |XXX| target files.
 
 This property specifies the base name for |xxx| target files.  It
-overrides OUTPUT_NAME and OUTPUT_NAME_<CONFIG> properties.
-
-.. include:: TARGET_FILE_TYPES.txt
+overrides :prop_tgt:`OUTPUT_NAME` and :prop_tgt:`OUTPUT_NAME_<CONFIG>`
+properties.

+ 3 - 2
Help/variable/CMAKE_ARCHIVE_OUTPUT_DIRECTORY.rst

@@ -1,8 +1,9 @@
 CMAKE_ARCHIVE_OUTPUT_DIRECTORY
 ------------------------------
 
-Where to put all the ARCHIVE targets when built.
+Where to put all the :ref:`ARCHIVE <Archive Output Artifacts>`
+target files when built.
 
-This variable is used to initialize the ARCHIVE_OUTPUT_DIRECTORY
+This variable is used to initialize the :prop_tgt:`ARCHIVE_OUTPUT_DIRECTORY`
 property on all the targets.  See that target property for additional
 information.

+ 9 - 0
Help/variable/CMAKE_ARCHIVE_OUTPUT_DIRECTORY_CONFIG.rst

@@ -0,0 +1,9 @@
+CMAKE_ARCHIVE_OUTPUT_DIRECTORY_<CONFIG>
+---------------------------------------
+
+Where to put all the :ref:`ARCHIVE <Archive Output Artifacts>`
+target files when built for a specific configuration.
+
+This variable is used to initialize the
+:prop_tgt:`ARCHIVE_OUTPUT_DIRECTORY_<CONFIG>` property on all the targets.
+See that target property for additional information.

+ 3 - 2
Help/variable/CMAKE_LIBRARY_OUTPUT_DIRECTORY.rst

@@ -1,8 +1,9 @@
 CMAKE_LIBRARY_OUTPUT_DIRECTORY
 ------------------------------
 
-Where to put all the LIBRARY targets when built.
+Where to put all the :ref:`LIBRARY <Library Output Artifacts>`
+target files when built.
 
-This variable is used to initialize the LIBRARY_OUTPUT_DIRECTORY
+This variable is used to initialize the :prop_tgt:`LIBRARY_OUTPUT_DIRECTORY`
 property on all the targets.  See that target property for additional
 information.

+ 9 - 0
Help/variable/CMAKE_LIBRARY_OUTPUT_DIRECTORY_CONFIG.rst

@@ -0,0 +1,9 @@
+CMAKE_LIBRARY_OUTPUT_DIRECTORY_<CONFIG>
+---------------------------------------
+
+Where to put all the :ref:`LIBRARY <Library Output Artifacts>`
+target files when built for a specific configuration.
+
+This variable is used to initialize the
+:prop_tgt:`LIBRARY_OUTPUT_DIRECTORY_<CONFIG>` property on all the targets.
+See that target property for additional information.

+ 3 - 2
Help/variable/CMAKE_RUNTIME_OUTPUT_DIRECTORY.rst

@@ -1,8 +1,9 @@
 CMAKE_RUNTIME_OUTPUT_DIRECTORY
 ------------------------------
 
-Where to put all the RUNTIME targets when built.
+Where to put all the :ref:`RUNTIME <Runtime Output Artifacts>`
+target files when built.
 
-This variable is used to initialize the RUNTIME_OUTPUT_DIRECTORY
+This variable is used to initialize the :prop_tgt:`RUNTIME_OUTPUT_DIRECTORY`
 property on all the targets.  See that target property for additional
 information.

+ 9 - 0
Help/variable/CMAKE_RUNTIME_OUTPUT_DIRECTORY_CONFIG.rst

@@ -0,0 +1,9 @@
+CMAKE_RUNTIME_OUTPUT_DIRECTORY_<CONFIG>
+---------------------------------------
+
+Where to put all the :ref:`RUNTIME <Runtime Output Artifacts>`
+target files when built for a specific configuration.
+
+This variable is used to initialize the
+:prop_tgt:`RUNTIME_OUTPUT_DIRECTORY_<CONFIG>` property on all the targets.
+See that target property for additional information.