This test_automoc project is designed to demonstrate the results of one qt5_wrap method and four automoc methods of processing project headers with moc for the Qt5 case. The following are descriptions for the five "hello world" targets that are configured by this project. The C++ implementation files used by the five targets are called helloworld.cpp and reside in various subdirectories with identical code other than different #includes. The project header files #include'd by those implementation files are all identical but have various names and locations. 1. helloworld_qt5_wrap This target demonstrates the straightforward qt5_wrap method where the header file name does not have the same basename or directory location as the implementation file. The moc-generated results do not need to be #included in the C++ implementation file because they are specifically added to the list of target source files. 2. helloworld_automoc_noinclude This target demonstrates the automoc method for exactly the same needs (header with different basename in different directory location) as in 1. The moc-generated results should not be #included in the C++ implementation file because that method has the potential to name clash. Without such an #include, the moc results are automatically added to the list of target source files by automoc in a way that does not name clash. 3. helloworld_automoc_same_noinclude This target demonstrates the automoc method for the special case when the header is in the same directory as the source file and has the same basename. For the same reasons as for the helloworld_automoc_noinclude target above, the moc-generated results should not be #included in the C++ implementation file. 4. helloworld_automoc_same_include This target is a variant of helloworld_automoc_same_noinclude where the header file is in the same directory as the implementation file, but does not have the same basename. In this case, the moc_.cpp file must be #included by the user in the implementation file to indicate to the automoc system that the .h file must be processed by moc to generate moc_.cpp. However, there is a potential to name clash in this case. 5. The helloworld_automoc_same_include1 and helloworld_automoc_same_include2 targets These two targets deliberately use identical implementation code and headers as the helloworld_automoc_same_include target. For helloworld_automoc_same_include1 the identical code in the same directory as used by the helloworld_automoc_same_include target is used, while for helloworld_automoc_same_include2, the code is identical but copied to a separate directory (in case that would make any difference). The builds of these two targets and the helloworld_automoc_same_include target demonstrate a nameclash with CMake-3.7.0 (with no warning about that nameclash which is likely a bug in that version of CMake). Each separate target generates the same file called moc_.cpp in the common build subdirectory for these three different targets, and that file is generated three separate times. So that is potentially a big issue for parallel builds with the possibility of three different target builds writing to the same file at the same time. And it is clearly an issue if the three targets (unlike this case) have different include directories or compiler definitions (which potentially can affect generated moc results).