johndoe
johndoe

Reputation: 303

CMake External Library Linking?

It seems cmake can't determine which libraries can be used with the current compiler or rather I want cmake to only use libraries that have been compiled with the same compiler.

I am using find_library to find the needed libraries but it seems to be unable to determine if the library is actually usable. It managed to find the library by name but it was using the ".lib" extension when I was making a configuration for MinGW. Do I have to create folders for every compiler I compile libraries for and add if statements for each compiler in my script ? That just seems counter intuitive to what I believed find_library would be capable of. Perhaps I am misusing it ? Anyone have any better ideas ?

Upvotes: 1

Views: 615

Answers (1)

Guillaume
Guillaume

Reputation: 10961

It seems you're a bit confused: you're right when you suggest that you need different libraries for MinGW and Visual Studio on Windows. But you're wrong when saying that .lib files can't be used by MinGW. Both Visual Studio and MinGW use .lib files to link to libraries on Windows.

The find_library command purpose is only to find libraries. Nothing more, so it's doing its job here.

If you want to make sure that the libraries found can be used by your compiler, you'll have to check that those libraries can be used by your compiler using try_compile:

find_library(YOURLIB_LIBRARY yourlib)
if (YOURLIB_LIBRARY)
    try_compile(YOURLIB_WORKS
        bindir
        somefile.c
        LINK_LIBRARIES ${YOURLIB_LIBRARY})
    if (YOURLIB_WORKS)
        # do something with your library
    else()
        # warn the user of stop the configuration process
    endif()
endif()

Upvotes: 2

Related Questions