find_package(Gint 2.1 REQUIRED) # Find libexample.a; if we had platform-specific versions we could look for # libexample-${FXSDK_PLATFORM}.a instead. execute_process( COMMAND ${CMAKE_C_COMPILER} -print-file-name=libexample.a OUTPUT_VARIABLE EX_PATH OUTPUT_STRIP_TRAILING_WHITESPACE) # EX_PATH is now the full path if libexample.a exists, "libexample.a" otherwise if(NOT "${EX_PATH}" STREQUAL "libexample.a") # Find the version.h header execute_process( COMMAND ${CMAKE_C_COMPILER} -print-file-name=include/example/config.h OUTPUT_VARIABLE EX_CONFIG OUTPUT_STRIP_TRAILING_WHITESPACE) # Extract version information from the config.h header. This command prints # the version on the line matching the regex and deletes every other line. execute_process( COMMAND sed -E "s/#define.*EX_VERSION\\s+\"(\\S+)\"$/\\1/p; d" ${EX_CONFIG} OUTPUT_VARIABLE EX_VERSION OUTPUT_STRIP_TRAILING_WHITESPACE) endif() # The commands above seem common for gint libraries, so the fxSDK provides a # helper function to get that directly. We simply provide the archive name, # header file name, macro name, and names for output variables. # include(FindSimpleLibrary) # find_simple_library(libexample.a include/example/config.h "EX_VERSION" # PATH_VAR EX_PATH VERSION_VAR EX_VERSION) # This CMake utility will handle the version comparisons and other checks. We # just specify: # -> Some variables that are defined only if the library is found (so if # they're undefined, CMake will conclude libexample was not found) # -> The version, so CMake can compare with the user's requested one include(FindPackageHandleStandardArgs) find_package_handle_standard_args(LibExample REQUIRED_VARS EX_CONFIG EX_VERSION VERSION_VAR EX_VERSION) # We now have a LibExample_FOUND variable, let's create the target that users # can link against with target_link_libraries() if(LibExample_FOUND) # This is an imported target, we don't build it, we just claim it's here add_library(LibExample::LibExample UNKNOWN IMPORTED) # Here we declare the compiler and linker flags that every user of LibExample # needs to use. set_target_properties(LibExample::LibExample PROPERTIES # If we specify where the library comes from, CMake will watch that file # and relink any user application when the library is updated! IMPORTED_LOCATION "${EX_PATH}" # Linking options INTERFACE_LINK_OPTIONS -lexample # Dependencies (for order on the command-line) IMPORTED_LINK_INTERFACE_LIBRARIES Gint::Gint) endif()