[CMake] Resetting CMAKE_Fortran_FLAGS for a specific file

marco restelli mrestelli at gmail.com
Wed Aug 13 10:44:36 EDT 2014


2014-08-13 16:16 GMT+0200, Mark Abraham <mark.j.abraham at gmail.com>:
> On Wed, Aug 13, 2014 at 7:12 AM, marco restelli <mrestelli at gmail.com>
> wrote:
>
>> 2014-08-13 15:53 GMT+0200, Mark Abraham <mark.j.abraham at gmail.com>:
>> > On Wed, Aug 13, 2014 at 3:18 AM, marco restelli <mrestelli at gmail.com>
>> > wrote:
>> >
>> >> Hi Petr,
>> >>    thanks, very informative!
>> >>
>> >> 2014-08-13 9:20 GMT+0200, Petr Kmoch <petr.kmoch at gmail.com>:
>> >> > Hi Marco.
>> >> >
>> >> > Sane compilers allow later command-line options to override earlier
>> >> > ones,
>> >> > so what you're doing should be fine. Unfortunately, I know some
>> Fortran
>> >> > compilers are not sane in this regard.
>> >>
>> >> Here, I would really like to reduce as much as possible the flags
>> >> regardless of the chosen compiler, so "undoing" the chosen flags
>> >> seems to me cumbersome and compiler dependent, compared to resetting
>> >> them altogether. I like the idea of OBJECT libraries better (it also
>> >> solves other problems I have, I did not know about it!).
>> >>
>> >> > If you really need to solve this by explicitly modifying the global
>> >> > list
>> >> > for a particular file, the only thing I can think of is move those
>> >> > files
>> >> to
>> >> > a separate CMakeList and turn them into an object library:
>> >>
>> >> This almost works, I have a problem specifying liking dependencies for
>> >> the OBJECT libraries. With a normal library, I can use
>> >>
>> >> TARGET_LINK_LIBRARIES( my_library ${other_libs_my_library_depends_on}
>> >> )
>> >>
>> >> but if my_library is OBJECT I see the error
>> >>
>> >>   Object library target "my_library" may not link to anything.
>> >>
>> >
>> > See http://www.cmake.org/cmake/help/v3.0/command/add_library.html for
>> the
>> > correct way to do things with object libraries - for this purpose, they
>> are
>> > closer to source files than libraries, which makes sense given that
>> there's
>> > not actually a library written to disk anywhere.
>>
>> Mark, thanks, but here I don't find anything that answers my question,
>> namely specifying that my OBJECT library (i.e. the files included in
>> it) require other libraries for linking.
>
>
> The object library is never linked, so the issue of linking with it or to
> it does not arise. The targets that use the object library have transitive
> linking dependencies, just like you had if the source files in the object
> library had been directly specified as part of those targets.

OK, let me see if I understad it. Using the example in

http://www.cmake.org/Wiki/CMake/Tutorials/Object_Library

let us say I have


# A/CMakeLists.txt
add_library(A OBJECT ${A_srcs})

# B/CMakeLists.txt
add_library(B OBJECT ${B_srcs})

# CMakeLists.txt
add_subdirectory(A)
add_subdirectory(B)
add_library(big ${other_srcs} $<TARGET_OBJECTS:A> $<TARGET_OBJECTS:B>)


and I know that whenever I link the files listed in ${A_srcs}, i.e.
whenever I likd the OBJECT library A, I also need to link
libsomeotherlibrary.a . Then in the main CMakeLists.txt I add

TARGET_LINK_LIBRARIES( big someotherlibrary )

right?


Moreover, there is no way to specify someotherlibrary in
A/CMakeLists.txt, it has to be done where I define the target big,
namely in the main CMakeLists.txt. Is this correct?


Thanks,
   Marco


More information about the CMake mailing list