On 16. Mar, 2010, at 9:54 , Verweij, Arjen wrote:

> Hi,
> 
>>> Hopefully I'm misunderstanding you, since otherwise the list would
>> contain
>>> close to 4000 files.
>> 
>> Well, I don't see a real problem with this. If this makes your files too
>> long,
>> just separate the setting of these source-variables into separate files.
> 
> I would prefer to keep the source listing with the source files, so perhaps I 
> should chain .cmake files from the level where I wish to generate 
> mystaticlib.a. That would make maintaining the source lists easier for 
> inadvertent users. To clarify, the average Fortran77 user (mathematician, 
> physicist, structural engineer etc.) I know usually does not have a computer 
> science background, so usability is a relative big issue.
> 
>>> But I took a look at Michael Wild's approach (thanks Tyler) which
>> leads me
>>> to believe there is no clean way to go about it. I suppose in the
>> spirit of
>>> his solution I could create a global list of the archives I obtain,
>> and
>>> feed them to target_link_libraries (myexecutable
>>> ${my_global_list_of_archives}) in the same scope where I call
>>> add_executable().
>> 
>> If you are creating an executable (I thought you were creating a static
>> library as end result), you can just link your executable against all
>> these
>> static libs.
> 
> I am. Well, it's complicated. We provide one big archive to link against, so 
> the core of the program is inside the binary when they define their own 
> routines. There is no point in making it a shared object since it is never 
> shared. Most users will just use the binary we provide.
> 
> It just seems that cmake was set up with a different mindset, in which it is 
> frowned upon to create a single library (static or not) composed of multiple 
> source directories. I will try to wrap something around add_subdirectory() 
> and have my_add_subdirectory() take care of propagation of the (127 :) source 
> lists to the parent scope, so I can get a list for add_library(). If that 
> fails perhaps just be satisfied with referencing all source lists explicitly 
> from the top... Any other suggestions very welcome.
> 
> Thanks,
> Arjen


CMakeLists.txt:
###############
project(superDuper Fortran)

#- Add sources for a target
#
#  ADD_SOURCES(<target> <source1> [<source2> ...])
#
function(add_sources target)
  # define the <target>_SRCS properties if necessary
  get_property(prop_defined GLOBAL PROPERTY ${target}_SRCS DEFINED)
  if(NOT prop_defined)
    define_property(GLOBAL PROPERTY ${target}_SRCS
      BRIEF_DOCS "Sources for the ${target} target"
      FULL_DOCS "List of source files for the ${target} target")
  endif()
  # create list of sources (absolute paths)
  set(SRCS)
  foreach(src IN LISTS ARGN)
    if(NOT IS_ABSOLUTE "${src}")
      get_filename_component(src "${src}" ABSOLUTE)
    endif()
    list(APPEND SRCS "${src}")
  endforeach()
  # append to global property
  set_property(GLOBAL APPEND PROPERTY "${target}_SRCS" "${SRCS}")
endfunction()

# descend into sub-directories
add_subdirectory(a)
add_subdirectory(b)

get_property(super_SRCS GLOBAL PROPERTY super_SRCS)

add_library(super STATIC ${super_SRCS})
###############

a/CMakeLists.txt:
#################
add_sources(super
  a1.f
  a2.f
  a3.f
  )
#################

b/CMakeLists.txt:
#################
add_sources(super
  b1.f
  b2.f
  )
#################



I hope this gives you an idea how you could do this in an easy-to-use way.


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