1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
|
cmake_minimum_required(VERSION 3.21)
project(qtdensitydemo)
find_package(Qt6 REQUIRED)
find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets SvgWidgets)
set(CMAKE_VERBOSE_MAKEFILE ON)
set(CMAKE_MESSAGE_CONTEXT_SHOW ON)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_FIND_FRAMEWORK ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_VERBOSE_MAKEFILE 0)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC ON)
set(QT_USE_QTSVG 1)
add_definitions(${QT_DEFINITIONS})
add_definitions(-DQT_DLL)
include_directories(${QT_INCLUDE_DIR})
link_directories(${QT_LIBRARY_DIR})
execute_process(COMMAND R RHOME
OUTPUT_VARIABLE R_HOME)
set(sources ../main.cpp
../qtdensity.cpp)
set(headers ../qtdensity.h)
set(NUM_TRUNC_CHARS 2)
execute_process(COMMAND R CMD config --cppflags OUTPUT_VARIABLE RCPPFLAGS)
string(SUBSTRING ${RCPPFLAGS} ${NUM_TRUNC_CHARS} -1 RCPPFLAGS)
include_directories(${RCPPFLAGS})
execute_process(COMMAND R CMD config --ldflags OUTPUT_VARIABLE RLDFLAGS)
string(LENGTH ${RLDFLAGS} RLDFLAGS_LEN)
string(STRIP ${RLDFLAGS} RLDFLAGS)
execute_process(COMMAND Rscript -e "Rcpp:::CxxFlags()" OUTPUT_VARIABLE RCPPINCL)
string(SUBSTRING ${RCPPINCL} ${NUM_TRUNC_CHARS} -1 RCPPINCL)
string(REPLACE "\"" "" RCPPINCL ${RCPPINCL}) #Rcpp::CxxFlags() adds quotes around the include directory, which is friendly and all but breaks include_directories
include_directories(${RCPPINCL})
execute_process(COMMAND Rscript -e "Rcpp:::LdFlags()" OUTPUT_VARIABLE RCPPLIBS)
if (${RCPPLIBS} MATCHES "[-][L]([^ ;])+")
string(SUBSTRING ${CMAKE_MATCH_0} ${NUM_TRUNC_CHARS} -1 RCPPLIBS_L)
link_directories(${RCPPLIBS_L} )
endif()
if (${RCPPLIBS} MATCHES "[-][l][R]([^;])+")
string(SUBSTRING ${CMAKE_MATCH_0} ${NUM_TRUNC_CHARS} -1 RCPPLIBS_l)
endif()
execute_process(COMMAND Rscript -e "RInside:::CxxFlags()"
OUTPUT_VARIABLE RINSIDEINCL)
string(SUBSTRING ${RINSIDEINCL} ${NUM_TRUNC_CHARS} -1 RINSIDEINCL)
include_directories(${RINSIDEINCL})
execute_process(COMMAND Rscript -e "RInside:::LdFlags()" OUTPUT_VARIABLE RINSIDELIBS)
string(STRIP ${RINSIDELIBS} RINSIDELIBS )
string(REPLACE "\"" "" RINSIDELIBS ${RINSIDELIBS})
if (${RINSIDELIBS} MATCHES "[-][L]([^ ;])+")
string(SUBSTRING ${CMAKE_MATCH_0} ${NUM_TRUNC_CHARS} -1 RINSIDELIBS_L)
link_directories(${RINSIDELIBS_L})
endif()
if (${RINSIDELIBS} MATCHES "[-][l][R]([^;])+")
string(SUBSTRING ${CMAKE_MATCH_0} ${NUM_TRUNC_CHARS} -1 RINSIDELIBS_l)
endif()
if (${RINSIDELIBS} MATCHES ".+\.a$")
set(RINSIDELIBS_l ${RINSIDELIBS})
endif()
execute_process(COMMAND R CMD config CXXFLAGS OUTPUT_VARIABLE RCXXFLAGS)
execute_process(COMMAND R CMD config BLAS_LIBS OUTPUT_VARIABLE RBLAS)
execute_process(COMMAND R CMD config LAPACK_LIBS OUTPUT_VARIABLE RLAPACK)
set(CMAKE_CXX_FLAGS "-W -Wall -pedantic -Wextra ${CMAKE_CXX_FLAGS}")
if (CMAKE_BUILD_TYPE STREQUAL "DEBUG" OR
CMAKE_BUILD_TYPE STREQUAL "RelWithDebugInfo" )
add_definitions("-DDEBUG")
elseif ( CMAKE_BUILD_TYPE STREQUAL "RELEASE" )
add_definitions("-O3")
endif()
qt_add_executable(qtdensitydemo ${sources} ${headers})
target_link_libraries(
qtdensitydemo
PRIVATE
Qt6::Gui
Qt6::Core
Qt6::Widgets
Qt6::SvgWidgets
${BLAS_LIBS}
${LAPACK_LIBS}
${RCPPLIBS_l}
${RINSIDELIBS_l}
${RLDFLAGS}
)
|