Transitive linker flags

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view

Transitive linker flags

Zaak Beekman

I'm defining a static library target and, conditionally, when on windows, I need to pass a whole bunch of windows system libraries and tell Visual Studio that any target linking against this static library should pass additional linker flags ( `\NODEFAULTLIB:libcd \INCREMENTAL:NO` ). I tried setting the LINKER_FLAGS property on the target with 

    +  set_property(TARGET ECI_C
    +    PROPERTY
    +    APPEND
    +    LINK_FLAGS "${prefix}NODEFAULTLIB${colon}\"libcd\"")
    +    set_property(TARGET ECI_C
    +    PROPERTY
    +    APPEND
    +    LINK_FLAGS "${prefix}INCREMENTAL${colon}NO")

however, these flags did not seem to get transitively propagated to the executable linking against this ECI_C static library. Am I doing something wrong, or should I just specify the flags through the `target_link_libraries( ECI_C INTERFACE FLAG1 FLAG2 )` command?  What's the "right"/canonical way to do this?

Also, I'm extremely new to developing on Windows with MSVS, and I'm writing CMake files to generate visual studio projects to more or less match some that have been manually written. Without ignoring the `libcd` library I get linker errors like

    error LNK2019: unresolved external symbol __imp_fopen

Which seems strange that I should have to ignore the standard C debug library to fix. Without the `\INCREMENTAL:NO` flag I get warnings like

   warning LNK4217: locally defined symbol malloc imported in function inittask

Are the manually written VS solution files or source code that I've inherited doing something silly that requires these MSVS linker flags to be set? It feels like this, along with the sheer quantity of system libraries that are being passed to the linker may be a bit of a cludge. I'm wondering, if it's worth spending my limited time investigating this further or is this expected/common-practice/acceptable usage?


Izaak "Zaak" Beekman

HPC Scientist
ParaTools Inc.
1509 16th St, NW
Washington, DC 20036
mobile: <a href="tel:(917)%20797-3239" value="+19177973239" target="_blank">(917) 797-3239


Powered by

Please keep messages on-topic and check the CMake FAQ at:

Kitware offers various services to support the CMake community. For more information on each offering, please visit:

CMake Support:
CMake Consulting:
CMake Training Courses:

Visit other Kitware open-source projects at

Follow this link to subscribe/unsubscribe: