[CMake] namespace support

Peter Kümmel syntheticpp at gmx.net
Wed Feb 2 18:36:52 EST 2011


On 02.02.2011 17:18, Michael Hertling wrote:
> On 02/02/2011 04:21 PM, Peter Kümmel wrote:
>> On 02.02.2011 16:17, Michael Wild wrote:
>>>> namespace(a)
>>>>       include_directories(a)
>>>>       add_library(a MODULE a/a.cpp)
>>>> endnamespace()
>>>>
>>> Put a CMakeLists.txt file in a/ and b/ and do the include_directories()
>>
>> Exactly this is what I don't wanna do and why I've asked ;)
>>
>> Seems it becomes a feature request.
>
> Indeed, the restriction of INCLUDE_DIRECTORIES() is sometimes annoying;
> having INCLUDE_DIRECTORIES target and source file properties available
> along with the directory property - analogous to COMPILE_DEFINITIONS -
> would be quite welcome, IMO. However, if your plugins are built in a
> sufficiently unique manner, you might automate this process by use of
> a CMake function:
>
> CMAKE_MINIMUM_REQUIRED(VERSION 2.8 FATAL_ERROR)
> PROJECT(PLUGINS C)
> FILE(WRITE ${CMAKE_SOURCE_DIR}/f/f.c "void f(void){}\n")
> FILE(WRITE ${CMAKE_SOURCE_DIR}/g/g.c "void g(void){}\n")
> FILE(WRITE ${CMAKE_SOURCE_DIR}/h/h.c "void h(void){}\n")
> FUNCTION(ADD_PLUGINS)
>      FOREACH(i IN LISTS ARGN)
>          IF(NOT IS_ABSOLUTE ${i})
>              SET(i ${CMAKE_CURRENT_SOURCE_DIR}/${i})
>          ENDIF()
>          GET_FILENAME_COMPONENT(t ${i} NAME_WE)
>          GET_FILENAME_COMPONENT(p ${i} PATH)
>          GET_FILENAME_COMPONENT(d ${p} NAME)
>          FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/${d}/CMakeLists.txt
>          "INCLUDE_DIRECTORIES(${p})\nADD_LIBRARY(${t} MODULE ${i})\n")
>         ADD_SUBDIRECTORY(${CMAKE_CURRENT_BINARY_DIR}/${d}
>                          ${CMAKE_CURRENT_BINARY_DIR}/${d})
>      ENDFOREACH()
> ENDFUNCTION()
> ADD_PLUGINS(f/f.c g/g.c h/h.c)
>
> For each plugin, the ADD_PLUGINS() function creates a directory and
> provides a CMakeLists.txt which builds the plugin with an individual
> search path for header files. Possibly, that approach can be adapted
> to your needs.
>
> Regards,
>
> Michael

Nice idea. I already have a macro for the plugins so it wouldn't be that  hard.

Thanks,
Peter






More information about the CMake mailing list