On 22. Apr, 2010, at 15:29 , naryniecki wrote:

> 
> 
> 
> Dnia 22 kwietnia 2010 15:04 Magnus Therning <[email protected]> napisaƂ(a):
> 
>> On Thu, Apr 22, 2010 at 10:23, naryniecki <[email protected]> wrote:
>>> Hi,
>>> 
>>> I know there is such possibility, but I have also few directories with
>>> which are compiled and linked in "normal" way. In such situation I
>>> would have to create custom target for this big directory. But I had
>>> problem how to create target which say: compile all *.cpp files from
>>> directory to .o files.  I tried to use CMAKE_C_COMPILE_OBJECT somehow
>>> or CMAKE_C_FLAGS but it didn't work. I had "\" signs in CMAKE_C_FLAGS
>>> and couldn't remove. I wrote to this list some time ago but no answer.
>> 
>> I'm not quite sure I understand what you are trying to do.  AFAIU your
>> goal is to do the following:
>> 
>> - compile every C++ file in the directory
>> - link the resulting object files into a library
>> 
>> Is that correct?
>> 
> Yes, exactly.
> For each directory I have:
> FILE(GLOB_RECURSE FILES sources/Ald/*.cpp)
> add_library(Ald STATIC ${FILES})
> 
> but one directory has to much files and I can't change it. 
> 
> br
> Marek

Try to stay away from GLOB_RECURSE. It is evil (for one, CMake is not 
automatically rerun when you add/remove files). If there are too many files to 
list in the CMakeLists.txt, create e.g. files.cmake which set a variable (e.g. 
SRCS) to the list of source files.

A dirty trick to solve your problem would be something like this:

CMakeLists.txt:
###############
set(TOPIC_A_SRCS a1.cpp a2.cpp a3.cpp)
set(TOPIC_B_SRCS b1.cpp b2.cpp)
set(TOPIC_C_SRCS c1.cpp c3.cpp c4.cpp)
set(SRCS)
foreach(topic A B C)
  set(TXT "/* AUTOMATICALLY GENERATED! DO NOT EDIT! */\n\n")
  foreach(f ${TOPIC_${topic}_SRCS})
    get_filename_component(ff "${f}" ABSOLUTE)
    set(TXT "#include \"${ff}\"\n")
  endforeach()
  configure_file(wrapper.cpp.in
    "${CMAKE_CURRENT_BINARY_DIR}/wrapper_${topic}.cpp"
    @ONLY)
  list(APPEND SRCS "${CMAKE_CURRENT_BINARY_DIR}/wrapper_${topic}.cpp")
endforeach()
add_library(super_large ${SRCS})
###############


wrapper.cpp.in:
###############
@TXT@
###############

The big drawback of this is that if you change a file, the whole wrapper which 
includes this file will be recompiled. Also, dependency scanning and 
preprocessing will slightly (probably not noticeable) increase compilation 
times.

HTH

Michael
_______________________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake

Reply via email to