Hi, I’m making a Cinder block on top of libnfc for NFC applications. I want to make it cross-platform using libcinder’s Cmake ecosystem. The block needs to link to the static libnfc.a file which is located on a path dependent to the platform and architecture of Cinder. For instance right now I do this in my Cinder-libnfcConfig.cmake file to link to the lib:
target_link_libraries( Cinder-libnfc PUBLIC "${LIBNFC_PATH}/lib/libnfc/lib/linux/x86_64/libnfc.a" )
I’d like to make this in a way that Cmake automagically detects the right path based on the platform configurations. To get the platform, right now I use if() checks for CINDER_LINUX, CINDER_MSW and so on. I thought maybe Cinder saves this in a string when it’s built and instead of doing the checks again I can just use that string. Is there such thing? How about the architecture configs?
Cinder’s configure.cmake sets all necessary variables that you would need to achieve what you want and should all be available already inside your Cinder-libnfcConfig.cmake after the following check:
.....
if( NOT TARGET cinder )
include( "${CINDER_PATH}/proj/cmake/configure.cmake" )
find_package( cinder REQUIRED PATHS
"${CINDER_PATH}/${CINDER_LIB_DIRECTORY}"
"$ENV{CINDER_PATH}/${CINDER_LIB_DIRECTORY}" )
endif()
# Variables set inside configure.cmake should be in scope from here on
.....
Indeed it was all available after that check as you noted. CINDER_TARGET_LOWER and CINDER_ARCH came to the rescue. So now, thanks to your tip, without any extra checks I just write this:
target_link_libraries( Cinder-libnfc PUBLIC "${LIBNFC_PATH}/lib/libnfc/lib/${CINDER_TARGET_LOWER}/${CINDER_ARCH}/libnfc.a" )