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