[CMake] Check whether C++ headers are self-sufficient
Robert Maynard
robert.maynard at kitware.com
Sat Mar 14 09:55:21 EDT 2015
I have worked on projects where we do something fairly similar. The
significant difference is that we create only a single executable per
directory. All told is it a fairly simple and looks something like:
# Builds a source file and an executable that does nothing other than
# compile the given header files.
function(add_header_test name)
set(hfiles ${ARGN})
set(suffix ".cpp")
set(cxxfiles)
foreach (header ${ARGN})
string(REPLACE "${CMAKE_CURRENT_BINARY_DIR}" "" header "${header}")
get_filename_component(headername ${header} NAME_WE)
set(src
${CMAKE_CURRENT_BINARY_DIR}/TestBuild_${name}_${headername}${suffix})
configure_file(${SMTK_SOURCE_DIR}/CMake/TestBuild.cxx.in ${src} @ONLY)
set(cxxfiles ${cxxfiles} ${src})
endforeach (header)
add_library(TestBuild_${name} ${cxxfiles} ${hfiles})
target_include_directories(TestBuild_${name} ${CMAKE_CURRENT_BINARY_DIR})
set_source_files_properties(${hfiles} PROPERTIES HEADER_FILE_ONLY TRUE)
endfunction(add_header_test)
On Sat, Mar 14, 2015 at 8:19 AM, Christoph Grüninger <foss at grueninger.de>
wrote:
> Dear CMakers,
> I want to have all my C++ headers self-sufficient (self-contained),
> i.e., a header can be included without additional includes. This is not
> only handy but also part of Google's C++ styleguide [2].
>
> It would be great to have a make target (let's call it headercheck),
> that can check for this, by compiling a simple test.cc file for each
> current_header.h:
> #include <config.h>
> #include "current_header.h"
> #include "current_header.h"
>
> Additionally it would be great to have such a target for every folder
> (checking all headers recursively) and every header that is explicitly
> passed as an argument.
>
> We tried this with CMake: We generate a test.cc file per header and
> create a library for every cc file. The problem is, that we get hundreds
> of additional targets, we generate a lot of folders and files which can
> increase our build directory size by an order of magnitude and it does
> not work properly on a per file or per directory basis.
>
> What do you think, is there a good way to have such a target headercheck
> with CMake? Or would it be better to include it as a CTest? Or better as
> an external (bash) script as proposed in [1]?
>
> If it can be done in a good way with CMake, would it be of interest to
> include it as a feature in CMake? Or as an external project similar to
> UseLATEX.cmake?
>
> Bye
> Christoph
>
> [1]
>
> http://stackoverflow.com/questions/1892043/self-sufficient-header-files-in-c-c
> [2]
>
> http://google-styleguide.googlecode.com/svn/trunk/cppguide.html#Self_contained_Headers
>
> --
> When you die, that does not mean that you lose to cancer,
> you beat cancer by how you live, why you live, and in the
> manner in which you live. -- Stuart Scott, 1965-2015
> --
>
> Powered by www.kitware.com
>
> Please keep messages on-topic and check the CMake FAQ at:
> http://www.cmake.org/Wiki/CMake_FAQ
>
> Kitware offers various services to support the CMake community. For more
> information on each offering, please visit:
>
> CMake Support: http://cmake.org/cmake/help/support.html
> CMake Consulting: http://cmake.org/cmake/help/consulting.html
> CMake Training Courses: http://cmake.org/cmake/help/training.html
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Follow this link to subscribe/unsubscribe:
> http://public.kitware.com/mailman/listinfo/cmake
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/cmake/attachments/20150314/19031dd6/attachment.html>
More information about the CMake
mailing list