[CMake] How does :: actually works?

Johannes Zarl-Zierl johannes.zarl-zierl at jku.at
Thu Jun 11 09:22:16 EDT 2015


Hi,

> I tried several times now to find documentation about how to define
> and use target names which seem to have namespaces, like Qt ones.
> 
> For example: add_executable( MyProject::some_target ... )

AFAIK target namespaces are intended for imported targets, not "regular" 
targets:

"A NAMESPACE with double-colons is specified when exporting the targets for 
installation. This convention of double-colons gives CMake a hint that the 
name is an IMPORTED target when it is used by downstreams with the 
target_link_libraries() command. This way, CMake can issue a diagnostic if the 
package providing it has not yet been found."
[1]


[1] http://www.cmake.org/cmake/help/v3.3/manual/cmake-packages.7.html?highlight=namespace

> I can't find any documentation or even name for this.
> Is it considered a "namespace"?
> In any way I found nothing specific to this syntax in the wiki.

The concept is called "namespace" in cmake, just as you assumed. I don't know 
if there's anything about it in the wiki, but the official documentation has a 
(very) short description in the cmake_packages[1] page, as well as in the 
documentation for the export command.

Cheers,
  Johannes


More information about the CMake mailing list