cmakelists.txt

来自「一个语言识别引擎」· 文本 代码 · 共 211 行

TXT
211
字号
INCLUDE(ListUtils.cmake)

SET(EXT_LIBS "")
SET(ALL_SRC "")

##### LOCAL MACROS
MACRO(DD_FIND_LOCAL_LIB var dd LIBS)
  FOREACH(lib ${LIBS})
	SET(LOCAL_PATH ${CMAKE_SOURCE_DIR}/src/libYARP_dev/src/${dd}/${OS_TAG}/dd_orig/lib)
	FILE(GLOB TEMP ${LOCAL_PATH}/${lib})
	IF (TEMP)
	  MESSAGE(STATUS "OK ${lib} found in ${LOCAL_PATH}")
   	  SET(EXT_LIBS "${EXT_LIBS};${LOCAL_PATH}/${lib}")
	  SET(PATH-${DD} ${LOCAL_PATH}/${lib} CACHE FILEPATH "Lib required by ${DD}")
	ELSE(TEMP)
	  MESSAGE(ERROR "${lib} NOT found in ${LOCAL_PATH}")
	  SET(PATH-${DD}-${lib} "NOT-FOUND: ${lib}" CACHE FILEPATH "Path to ${lib} (required by ${DD})")
	ENDIF(TEMP)
  ENDFOREACH(lib ${ARGN})
ENDMACRO(DD_FIND_LOCAL_LIB)

MACRO(DD_FIND_EXTERNAL_LIB var dd LIBS)
  MESSAGE(STATUS "WARNING: ${dd} requires proper installation of: ${LIBS}, YARP assumes you took care of that.")
  SET(EXT_LIBS "${EXT_LIBS};${LIBS}")
ENDMACRO(DD_FIND_EXTERNAL_LIB)
##### END  LOCAL MACROS

### BEGIN PROJECT CODE
PROJECT(libYARP_dev)

#the name of the project, the output will be this name .lib (in windows "d" will be added
#to this name to compile the debug version)
SET(PROJECT_NAME YARP_dev)
# set the OS_TAG variable to "linux" or "winnt"
YarpTag()

SET(AVAILABLE_DEVICES "") #default is an empty list

INCLUDE(AvailableDevices.txt)

# cycle all available devices -- creates a cache entry for each of them
# so the user can enable/disable them. Devices that are disabled are
# NOT compiled in libYARP_dev. ENABLE_${DD} is also used when CMake
# generates PolulateDriver.cpp, see below.
FOREACH(DD ${AVAILABLE_DEVICES})
  SET(ENABLE_${DD} FALSE CACHE BOOL "Do you want to add ${DD} to libYARP_dev?")
ENDFOREACH(DD ${AVAILABLE_DEVICES})

# cycle additional modules -- creates a cache entry for each of them.
# These modules at the moment are always compiled
# in libYARP_dev. ENABLE_${AM} (by default true) is used when CMake 
# generates PopulateDriver.cpp, see below.
FOREACH(AM ${ADDITIONAL_MODULES})
  SET(ENABLE_${AM} TRUE CACHE INTERNAL "Select additional module ${AM}?")
ENDFOREACH(AM ${ADDITIONAL_MODULES})

SET(populator ${CMAKE_BINARY_DIR}/src/libYARP_dev/src_generated/PopulateDrivers.cpp)
CONFIGURE_FILE(${CMAKE_SOURCE_DIR}/src/libYARP_dev/src/PopulateDrivers.cpp.in
  ${populator} @ONLY  IMMEDIATE)

# any non-driver-specific source code
#AUX_SOURCE_DIRECTORY(src libcode_general)
FILE(GLOB libcode_general src/*.cpp)

# re-check all DD to find the ones that were selected by the user
FOREACH(DD ${AVAILABLE_DEVICES})
  IF (ENABLE_${DD})
    SET(LOCAL_PATH ${CMAKE_SOURCE_DIR}/src/libYARP_dev/src/${DD}/${OS_TAG})
    MESSAGE(STATUS "Parsing ${LOCAL_PATH}") 
    FILE(GLOB TEMP_PATH ${LOCAL_PATH}/libraries.txt)
    IF(NOT TEMP_PATH)
        SET(LOCAL_PATH ${CMAKE_SOURCE_DIR}/src/libYARP_dev/src/${DD}/default)
	MESSAGE(STATUS "Parsing ${LOCAL_PATH}") 
	FILE(GLOB TEMP_PATH ${LOCAL_PATH}/libraries.txt)
    ENDIF(NOT TEMP_PATH)
    IF(TEMP_PATH)
	  MESSAGE(STATUS "Found libraries.txt for ${DD}") 
	  SET(FOUND_DD ${FOUND_DD} ${DD})
	  SET(FOUND_ONE TRUE) #at least one dd was found
    ELSE(TEMP_PATH)
	  MESSAGE(STATUS "No libraries.txt found for ${DD}, skipping it")
    ENDIF(TEMP_PATH)
  ENDIF (ENABLE_${DD})
ENDFOREACH(DD ${avail_dd})

## COMMON INCLUDE FILES
INCLUDE_DIRECTORIES(include ${CMAKE_SOURCE_DIR}/src/libYARP_dev/include 
  ${CMAKE_SOURCE_DIR}/src/libYARP_OS/include ${CMAKE_SOURCE_DIR}/src/libYARP_sig/include ${ACE_INCLUDE_DIR})
SET(header_path ${CMAKE_SOURCE_DIR}/src/libYARP_dev/include)


# parse all dd to collect source and header files, check dependencies
FOREACH(DD ${FOUND_DD})
  SET(LOCAL_PATH ${CMAKE_SOURCE_DIR}/src/libYARP_dev/src/${DD}/${OS_TAG})
  SET(LOCAL_TAG ${OS_TAG})
  FILE(GLOB TEMP_PATH ${LOCAL_PATH}/libraries.txt)
  IF(NOT TEMP_PATH)
        SET(LOCAL_PATH ${CMAKE_SOURCE_DIR}/src/libYARP_dev/src/${DD}/default)
	SET(LOCAL_TAG default)
	MESSAGE(STATUS "Parsing ${LOCAL_PATH}") 
	FILE(GLOB TEMP_PATH ${LOCAL_PATH}/libraries.txt)
  ENDIF(NOT TEMP_PATH)
  #  MESSAGE(STATUS "Reading ${LOCAL_PATH}/libraries.txt:") 
  FILE(READ ${LOCAL_PATH}/libraries.txt FILE)
  #  MESSAGE(STATUS "${FILE}")
  CAR(TOKEN ${FILE})
  CDR(LIB_LIST ${FILE})
  IF (TOKEN STREQUAL YARP_LOCAL)
	#	MESSAGE(STATUS "${DD} is going to use local libs: ${LIB_LIST}")
	DD_FIND_LOCAL_LIB(DUMMY ${DD} "${LIB_LIST}")
  ENDIF (TOKEN STREQUAL YARP_LOCAL)
  IF (TOKEN STREQUAL YARP_EXTERNAL)
	DD_FIND_EXTERNAL_LIB(DUMMY ${DD} "${LIB_LIST}")
  ENDIF(TOKEN STREQUAL YARP_EXTERNAL)
  IF (TOKEN STREQUAL YARP_CMAKE)
	    # currently works with just ONE library
	    CAR(libname ${LIB_LIST})
	    MESSAGE(STATUS "Checking for library dependency " ${libname})
	FIND_PACKAGE("${libname}" REQUIRED)
	STRING(TOUPPER "${libname}" uplibname)
	INCLUDE_DIRECTORIES(${${uplibname}_INCLUDE_DIR})
	LINK_DIRECTORIES(${${uplibname}_LINK_DIRECTORIES})
        SET(EXT_LIBS "${EXT_LIBS};${${uplibname}_LIBRARIES}")
	LINK_LIBRARIES(${${uplibname}_LIBRARIES})
  ENDIF(TOKEN STREQUAL YARP_CMAKE)

  FILE(GLOB libcode1 src/${DD}/common/yarp/*.cpp)
  #AUX_SOURCE_DIRECTORY(src/${DD}/common libcode1)
  #MESSAGE(STATUS "Source code for ${DD} is ${libcode1}")
  ## this message never works
  FILE(GLOB libcode2 src/${DD}/${LOCAL_TAG}/yarp/*.cpp)
  #AUX_SOURCE_DIRECTORY(src/${DD}/${OS_TAG}/yarp libcode2)
  SET(libcode ${libcode1} ${libcode2})
  SET(ALL_SRC ${ALL_SRC} ${libcode})
  INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/src/libYARP_dev/src/${DD}/common)
  INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/src/libYARP_dev/src/${DD}/${LOCAL_TAG})
  SET(header_path "${header_path};${CMAKE_SOURCE_DIR}/src/libYARP_dev/src/${DD}/common")
  # header files
  FILE(GLOB_RECURSE tmpHeaders src/${DD}/${LOCAL_TAG}/yarp/*.h)
  SET(libheaders ${libheaders} ${tmpHeaders})
  FILE(GLOB_RECURSE tmpHeaders src/${DD}/common/*.h)
  SET(libheaders ${libheaders} ${tmpHeaders})
ENDFOREACH(DD ${FOUND_DD})

##### add include files to project (visual studio)
# this only works if the files are also included in the project, see
# ADD_LIBRARY below
FILE(GLOB_RECURSE libheader2 include/*.h)
FILE(GLOB inlinefiles src/*.inl)
SET(libheader ${libheaders} ${libheader2})
SOURCE_GROUP("Header Files" FILES ${libheader})
SOURCE_GROUP("Inline Files" FILES ${inlinefiles})
######

####INCLUDE(YarpReqLib) # this should only be included once
# A FEW MESSAGES USEFUL FOR DEBUG
#MESSAGE(STATUS "Adding source files in:")
#MESSAGE(STATUS "${libcode}")
#MESSAGE(STATUS "Adding header files:")
#MESSAGE(STATUS "${libheader}")

SET(ALL_SRC ${ALL_SRC} ${libcode_general} ${populator})

# device library contains useful code
SET(FOUND_ONE TRUE)

#avoid empty projects...
IF(FOUND_ONE)
  # cmake does not like .inl files in linux/cygwin, but it is nice 
  # to have them listed in  the visual studio project.
  IF(WIN32 AND NOT CYGWIN)
	ADD_LIBRARY(${PROJECT_NAME} ${ALL_SRC} ${libheader} ${inlinefiles})
  ELSE(WIN32 AND NOT CYGWIN)
	  ADD_LIBRARY(${PROJECT_NAME} ${ALL_SRC} ${libheader})
  ENDIF(WIN32 AND NOT CYGWIN)

  SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES header_path "${header_path}")
  SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES ext_libs "${EXT_LIBS}")
  ### INSTALL RULES ###
  #libYARP_dev.a or YARP_dev.lib will be copied in CMAKE_INSTALL_PREFIX/lib
  INSTALL_TARGETS(/lib YARP_dev) 
  FILE(GLOB installedHeaders include/yarp/dev/*.h) 
  #libYARP_dev/include/yarp/dev/*.h will be copied in CMAKE_INSTALL_PREFIX/include/yarp/dev
  INSTALL_FILES(/include/yarp/dev FILES ${installedHeaders})
ENDIF(FOUND_ONE)


# Prepare properties for external users of library

GET_TARGET_PROPERTY(YARP_dev_LIB ${PROJECT_NAME} LOCATION)
GET_TARGET_PROPERTY(YARP_dev_INC ${PROJECT_NAME} header_path)
GET_TARGET_PROPERTY(YARP_dev_EXT_LIBS ${PROJECT_NAME} ext_libs)

IF (WIN32 AND NOT CYGWIN)
  SET(libname "${YARP_dev_LIB}")
  STRING(REPLACE ".lib" "d.lib" libname2 ${libname})
  SET(YARP_dev_LIB "optimized;${libname};debug;${libname2}" CACHE INTERNAL "libraries")
ENDIF (WIN32 AND NOT CYGWIN)
SET(YARP_dev_LIB ${YARP_dev_LIB} ${YARP_dev_EXT_LIBS})
IF (NOT YARP_dev_LIB)
  SET(YARP_dev_LIB "")
ENDIF (NOT YARP_dev_LIB)
IF (NOT YARP_dev_INC)
  SET(YARP_dev_INC "")
ENDIF (NOT YARP_dev_INC)

SET(YARP_dev_LIB "${YARP_dev_LIB}" CACHE INTERNAL "libraries")
SET(YARP_dev_INC "${YARP_dev_INC}" CACHE INTERNAL "include path")
SET(YARP_dev_EXT_LIBS "${YARP_dev_EXT_LIBS}" CACHE INTERNAL "extra libs")

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?