findwxwidgets.cmake
来自「编译器」· CMAKE 代码 · 共 970 行 · 第 1/3 页
CMAKE
970 行
WX_CONFIG_SELECT_QUERY_BOOL(static "Link libraries statically?")
# process selection to set wxWidgets_SELECT_OPTIONS
WX_CONFIG_SELECT_SET_OPTIONS()
DBG_MSG("wxWidgets_SELECT_OPTIONS=${wxWidgets_SELECT_OPTIONS}")
# run the wx-config program to get cxxflags
EXECUTE_PROCESS(
COMMAND sh "${wxWidgets_CONFIG_EXECUTABLE}"
${wxWidgets_SELECT_OPTIONS} --cxxflags
OUTPUT_VARIABLE wxWidgets_CXX_FLAGS
RESULT_VARIABLE RET
ERROR_QUIET
)
IF(RET EQUAL 0)
STRING(STRIP "${wxWidgets_CXX_FLAGS}" wxWidgets_CXX_FLAGS)
SEPARATE_ARGUMENTS(wxWidgets_CXX_FLAGS)
DBG_MSG_V("wxWidgets_CXX_FLAGS=${wxWidgets_CXX_FLAGS}")
# parse definitions from cxxflags; drop -D* from CXXFLAGS
STRING(REGEX MATCHALL "-D[^;]+"
wxWidgets_DEFINITIONS "${wxWidgets_CXX_FLAGS}")
STRING(REGEX REPLACE "-D[^;]+;" ""
wxWidgets_CXX_FLAGS "${wxWidgets_CXX_FLAGS}")
# parse include dirs from cxxflags; drop -I prefix
STRING(REGEX MATCHALL "-I[^;]+"
wxWidgets_INCLUDE_DIRS "${wxWidgets_CXX_FLAGS}")
STRING(REGEX REPLACE "-I[^;]+;" ""
wxWidgets_CXX_FLAGS "${wxWidgets_CXX_FLAGS}")
STRING(REPLACE "-I" ""
wxWidgets_INCLUDE_DIRS "${wxWidgets_INCLUDE_DIRS}")
DBG_MSG_V("wxWidgets_DEFINITIONS=${wxWidgets_DEFINITIONS}")
DBG_MSG_V("wxWidgets_INCLUDE_DIRS=${wxWidgets_INCLUDE_DIRS}")
DBG_MSG_V("wxWidgets_CXX_FLAGS=${wxWidgets_CXX_FLAGS}")
ELSE(RET EQUAL 0)
SET(wxWidgets_FOUND FALSE)
DBG_MSG_V(
"${wxWidgets_CONFIG_EXECUTABLE} --cxxflags FAILED with RET=${RET}")
ENDIF(RET EQUAL 0)
# run the wx-config program to get the libs
# - NOTE: wx-config doesn't verify that the libs requested exist
# it just produces the names. Maybe a TRY_COMPILE would
# be useful here...
STRING(REPLACE ";" ","
wxWidgets_FIND_COMPONENTS "${wxWidgets_FIND_COMPONENTS}")
EXECUTE_PROCESS(
COMMAND sh "${wxWidgets_CONFIG_EXECUTABLE}"
${wxWidgets_SELECT_OPTIONS} --libs ${wxWidgets_FIND_COMPONENTS}
OUTPUT_VARIABLE wxWidgets_LIBRARIES
RESULT_VARIABLE RET
ERROR_QUIET
)
IF(RET EQUAL 0)
STRING(STRIP "${wxWidgets_LIBRARIES}" wxWidgets_LIBRARIES)
SEPARATE_ARGUMENTS(wxWidgets_LIBRARIES)
STRING(REPLACE "-framework;" "-framework "
wxWidgets_LIBRARIES "${wxWidgets_LIBRARIES}")
STRING(REPLACE "-arch;" "-arch "
wxWidgets_LIBRARIES "${wxWidgets_LIBRARIES}")
STRING(REPLACE "-isysroot;" "-isysroot "
wxWidgets_LIBRARIES "${wxWidgets_LIBRARIES}")
# extract linkdirs (-L) for rpath (i.e., LINK_DIRECTORIES)
STRING(REGEX MATCHALL "-L[^;]+"
wxWidgets_LIBRARY_DIRS "${wxWidgets_LIBRARIES}")
STRING(REPLACE "-L" ""
wxWidgets_LIBRARY_DIRS "${wxWidgets_LIBRARY_DIRS}")
DBG_MSG_V("wxWidgets_LIBRARIES=${wxWidgets_LIBRARIES}")
DBG_MSG_V("wxWidgets_LIBRARY_DIRS=${wxWidgets_LIBRARY_DIRS}")
ELSE(RET EQUAL 0)
SET(wxWidgets_FOUND FALSE)
DBG_MSG("${wxWidgets_CONFIG_EXECUTABLE} --libs ${wxWidgets_FIND_COMPONENTS} FAILED with RET=${RET}")
ENDIF(RET EQUAL 0)
ENDIF(wxWidgets_CONFIG_EXECUTABLE)
#=====================================================================
# Neither UNIX_STYLE_FIND, nor WIN32_STYLE_FIND
#=====================================================================
ELSE(UNIX_STYLE_FIND)
IF(NOT wxWidgets_FIND_QUIETLY)
MESSAGE(STATUS
"${CMAKE_CURRENT_LIST_FILE}(${CMAKE_CURRENT_LIST_LINE}): \n"
" Platform unknown/unsupported. It's neither WIN32 nor UNIX "
"style find."
)
ENDIF(NOT wxWidgets_FIND_QUIETLY)
ENDIF(UNIX_STYLE_FIND)
ENDIF(WIN32_STYLE_FIND)
# Debug output:
DBG_MSG("wxWidgets_FOUND : ${wxWidgets_FOUND}")
DBG_MSG("wxWidgets_INCLUDE_DIRS : ${wxWidgets_INCLUDE_DIRS}")
DBG_MSG("wxWidgets_LIBRARY_DIRS : ${wxWidgets_LIBRARY_DIRS}")
DBG_MSG("wxWidgets_LIBRARIES : ${wxWidgets_LIBRARIES}")
DBG_MSG("wxWidgets_CXX_FLAGS : ${wxWidgets_CXX_FLAGS}")
DBG_MSG("wxWidgets_USE_FILE : ${wxWidgets_USE_FILE}")
#=====================================================================
#=====================================================================
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(wxWidgets DEFAULT_MSG wxWidgets_FOUND)
# Maintain consistency with all other variables.
SET(wxWidgets_FOUND ${WXWIDGETS_FOUND})
#=====================================================================
# Macros for use in wxWidgets apps.
# - This module will not fail to find wxWidgets based on the code
# below. Hence, it's required to check for validity of:
#
# wxWidgets_wxrc_EXECUTABLE
#=====================================================================
# Resource file compiler.
FIND_PROGRAM(wxWidgets_wxrc_EXECUTABLE wxrc
${wxWidgets_ROOT_DIR}/utils/wxrc/vc_msw
)
#
# WX_SPLIT_ARGUMENTS_ON(<keyword> <left> <right> <arg1> <arg2> ...)
#
# Sets <left> and <right> to contain arguments to the left and right,
# respectively, of <keyword>.
#
# Example usage:
# FUNCTION(WXWIDGETS_ADD_RESOURCES outfiles)
# WX_SPLIT_ARGUMENTS_ON(OPTIONS wxrc_files wxrc_options ${ARGN})
# ...
# ENDFUNCTION(WXWIDGETS_ADD_RESOURCES)
#
# WXWIDGETS_ADD_RESOURCES(sources ${xrc_files} OPTIONS -e -o file.C)
#
# NOTE: This is a generic piece of code that should be renamed to
# SPLIT_ARGUMENTS_ON and put in a file serving the same purpose as
# FindPackageStandardArgs.cmake. At the time of this writing
# FindQt4.cmake has a QT4_EXTRACT_OPTIONS, which I basically copied
# here a bit more generalized. So, there are already two find modules
# using this approach.
#
FUNCTION(WX_SPLIT_ARGUMENTS_ON _keyword _leftvar _rightvar)
# FIXME: Document that the input variables will be cleared.
#LIST(APPEND ${_leftvar} "")
#LIST(APPEND ${_rightvar} "")
SET(${_leftvar} "")
SET(${_rightvar} "")
SET(_doing_right FALSE)
FOREACH(element ${ARGN})
IF("${element}" STREQUAL "${_keyword}")
SET(_doing_right TRUE)
ELSE("${element}" STREQUAL "${_keyword}")
IF(_doing_right)
LIST(APPEND ${_rightvar} "${element}")
ELSE(_doing_right)
LIST(APPEND ${_leftvar} "${element}")
ENDIF(_doing_right)
ENDIF("${element}" STREQUAL "${_keyword}")
ENDFOREACH(element)
SET(${_leftvar} ${${_leftvar}} PARENT_SCOPE)
SET(${_rightvar} ${${_rightvar}} PARENT_SCOPE)
ENDFUNCTION(WX_SPLIT_ARGUMENTS_ON)
#
# WX_GET_DEPENDENCIES_FROM_XML(
# <depends>
# <match_pattern>
# <clean_pattern>
# <xml_contents>
# <depends_path>
# )
#
# FIXME: Add documentation here...
#
FUNCTION(WX_GET_DEPENDENCIES_FROM_XML
_depends
_match_patt
_clean_patt
_xml_contents
_depends_path
)
STRING(REGEX MATCHALL
${_match_patt}
dep_file_list
"${${_xml_contents}}"
)
FOREACH(dep_file ${dep_file_list})
STRING(REGEX REPLACE ${_clean_patt} "" dep_file "${dep_file}")
# make the file have an absolute path
IF(NOT IS_ABSOLUTE "${dep_file}")
SET(dep_file "${${_depends_path}}/${dep_file}")
ENDIF(NOT IS_ABSOLUTE "${dep_file}")
# append file to dependency list
LIST(APPEND ${_depends} "${dep_file}")
ENDFOREACH(dep_file)
SET(${_depends} ${${_depends}} PARENT_SCOPE)
ENDFUNCTION(WX_GET_DEPENDENCIES_FROM_XML)
#
# WXWIDGETS_ADD_RESOURCES(<sources> <xrc_files>
# OPTIONS <options> [NO_CPP_CODE])
#
# Adds a custom command for resource file compilation of the
# <xrc_files> and appends the output files to <sources>.
#
# Example usages:
# WXWIDGETS_ADD_RESOURCES(sources xrc/main_frame.xrc)
# WXWIDGETS_ADD_RESOURCES(sources ${xrc_files} OPTIONS -e -o altname.cxx)
#
FUNCTION(WXWIDGETS_ADD_RESOURCES _outfiles)
WX_SPLIT_ARGUMENTS_ON(OPTIONS rc_file_list rc_options ${ARGN})
# Parse files for dependencies.
SET(rc_file_list_abs "")
SET(rc_depends "")
FOREACH(rc_file ${rc_file_list})
GET_FILENAME_COMPONENT(depends_path ${rc_file} PATH)
GET_FILENAME_COMPONENT(rc_file_abs ${rc_file} ABSOLUTE)
LIST(APPEND rc_file_list_abs "${rc_file_abs}")
# All files have absolute paths or paths relative to the location
# of the rc file.
FILE(READ "${rc_file_abs}" rc_file_contents)
# get bitmap/bitmap2 files
WX_GET_DEPENDENCIES_FROM_XML(
rc_depends
"<bitmap[^<]+"
"^<bitmap[^>]*>"
rc_file_contents
depends_path
)
# get url files
WX_GET_DEPENDENCIES_FROM_XML(
rc_depends
"<url[^<]+"
"^<url[^>]*>"
rc_file_contents
depends_path
)
# get wxIcon files
WX_GET_DEPENDENCIES_FROM_XML(
rc_depends
"<object[^>]*class=\"wxIcon\"[^<]+"
"^<object[^>]*>"
rc_file_contents
depends_path
)
ENDFOREACH(rc_file)
#
# Parse options.
#
# If NO_CPP_CODE option specified, then produce .xrs file rather
# than a .cpp file (i.e., don't add the default --cpp-code option).
LIST(FIND rc_options NO_CPP_CODE index)
IF(index EQUAL -1)
LIST(APPEND rc_options --cpp-code)
# wxrc's default output filename for cpp code.
SET(outfile resource.cpp)
ELSE(index EQUAL -1)
LIST(REMOVE_AT rc_options ${index})
# wxrc's default output filename for xrs file.
SET(outfile resource.xrs)
ENDIF(index EQUAL -1)
# Get output name for use in ADD_CUSTOM_COMMAND.
# - short option scanning
LIST(FIND rc_options -o index)
IF(NOT index EQUAL -1)
MATH(EXPR filename_index "${index} + 1")
LIST(GET rc_options ${filename_index} outfile)
#LIST(REMOVE_AT rc_options ${index} ${filename_index})
ENDIF(NOT index EQUAL -1)
# - long option scanning
STRING(REGEX MATCH "--output=[^;]*" outfile_opt "${rc_options}")
IF(outfile_opt)
STRING(REPLACE "--output=" "" outfile "${outfile_opt}")
ENDIF(outfile_opt)
#STRING(REGEX REPLACE "--output=[^;]*;?" "" rc_options "${rc_options}")
#STRING(REGEX REPLACE ";$" "" rc_options "${rc_options}")
IF(NOT IS_ABSOLUTE "${outfile}")
SET(outfile "${CMAKE_CURRENT_BINARY_DIR}/${outfile}")
ENDIF(NOT IS_ABSOLUTE "${outfile}")
ADD_CUSTOM_COMMAND(
OUTPUT "${outfile}"
COMMAND ${wxWidgets_wxrc_EXECUTABLE} ${rc_options} ${rc_file_list_abs}
DEPENDS ${rc_file_list_abs} ${rc_depends}
)
# Add generated header to output file list.
LIST(FIND rc_options -e short_index)
LIST(FIND rc_options --extra-cpp-code long_index)
IF(NOT short_index EQUAL -1 OR NOT long_index EQUAL -1)
GET_FILENAME_COMPONENT(outfile_ext ${outfile} EXT)
STRING(REPLACE "${outfile_ext}" ".h" outfile_header "${outfile}")
LIST(APPEND ${_outfiles} "${outfile_header}")
SET_SOURCE_FILES_PROPERTIES(
"${outfile_header}" PROPERTIES GENERATED TRUE
)
ENDIF(NOT short_index EQUAL -1 OR NOT long_index EQUAL -1)
# Add generated file to output file list.
LIST(APPEND ${_outfiles} "${outfile}")
SET(${_outfiles} ${${_outfiles}} PARENT_SCOPE)
ENDFUNCTION(WXWIDGETS_ADD_RESOURCES)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?