joke-weather-app/GetWeather.pro

153 lines
7.1 KiB
Prolog
Raw Permalink Normal View History

2023-07-14 09:06:16 +00:00
###############################################################################
# Project file for CS106B/X student program
#
# @version Fall Quarter 2022 for Qt 6
# @author Julie Zelenski
# build client program using installed static library
###############################################################################
SPL_VERSION = 2022.1
SPL_URL = https://web.stanford.edu/dept/cs_edu/qt
TEMPLATE = app
QT += core gui widgets network
CONFIG += silent debug # quiet build and debug symbols always
CONFIG -= depend_includepath # library headers not changing, don't add depend
###############################################################################
# Find/use installed version of cs106 lib and headers #
###############################################################################
# Library installed into per-user writable data location from QtStandardPaths
win32|win64 { QTP_EXE = qtpaths.exe } else { QTP_EXE = qtpaths }
USER_DATA_DIR = $$system($$[QT_INSTALL_BINS]/$$QTP_EXE --writable-path GenericDataLocation)
SPL_DIR = $${USER_DATA_DIR}/cs106
STATIC_LIB = $$system_path($${SPL_DIR}/lib/libcs106.a)
SPL_VERSION_FILE = $$system_path($${SPL_DIR}/lib/version$${SPL_VERSION})
# Confirm presence of lib before build using extra target as prereq
check_lib.target = "$${STATIC_LIB}"
check_lib.commands = $(error No CS106 library found. Install CS106 package following instructions at $${SPL_URL})
QMAKE_EXTRA_TARGETS += check_lib
PRE_TARGETDEPS += $${check_lib.target}
# Confirm version of library is current
check_version.target = "$${SPL_VERSION_FILE}"
check_version.commands = $(error Cannot find version $${SPL_VERSION} of CS106 library. Install CS106 package following instructions at $${SPL_URL})
QMAKE_EXTRA_TARGETS += check_version
PRE_TARGETDEPS += $${check_version.target}
# link against libcs106.a, add library headers to search path
# libcs106 requires libpthread, add link here
LIBS += -lcs106 -lpthread
QMAKE_LFLAGS = -L$$shell_quote($${SPL_DIR}/lib)
# put PWD first in search list to allow local copy to shadow if needed
INCLUDEPATH += $$PWD "$${SPL_DIR}/include"
###############################################################################
# Configure project with custom settings #
###############################################################################
# remove spaces from target executable for better Windows compatibility
TARGET = $$replace(TARGET, " ", _)
# set DESTDIR to project root dir, this is where executable/app will deploy and run
DESTDIR = $$PWD
# student writes ordinary main() function, but it must be called within a
# wrapper main() that handles library setup/teardown. Rename student's
# to distinguish between the two main() functions and avoid symbol clash
# Ask Julie if you are curious why main->qMain->studentMain
DEFINES += main=qMain qMain=studentMain
###############################################################################
# Gather files to list in Qt Creator project browser #
###############################################################################
# honeypot to trick Qt Creator to allow glob-all to coexist with user-added files
# Qt looks for first 'SOURCES *=' line and lists user-added .cpp/h files there.
# Afterward we glob-add files to SOURCES ourselves. Operator *= will unique
# entries, so no worries about duplicates
SOURCES *= "" \
WeatherReport.cpp \
error.cpp
HEADERS *= "" \
WeatherReport.h \
error.h
# Gather any .cpp or .h files within the project folder (student/starter code).
# Second argument true makes search recursive
SOURCES *= $$files(*.cpp, true)
HEADERS *= $$files(*.h, true)
# Gather resource files (image/sound/etc) from res dir, list under "Other files"
OTHER_FILES *= $$files(res/*, true)
# Gather text files from root dir or anywhere recursively
OTHER_FILES *= $$files(*.txt, true)
###############################################################################
# Configure compiler, compile flags #
###############################################################################
# Configure flags for the C++ compiler
# (In general, many warnings/errors are enabled to tighten compile-time checking.
# A few overly pedantic/confusing errors are turned off to avoid confusion.)
CONFIG += sdk_no_version_check # removes spurious warnings on Mac OS X
# MinGW compiler lags, be conservative and use C++11 on all platforms
# rather than special case
CONFIG += c++11
# WARN_ON has -Wall -Wextra, add/remove a few specific warnings
QMAKE_CXXFLAGS_WARN_ON += -Werror=return-type
QMAKE_CXXFLAGS_WARN_ON += -Werror=uninitialized
QMAKE_CXXFLAGS_WARN_ON += -Wunused-parameter
QMAKE_CXXFLAGS_WARN_ON += -Wmissing-field-initializers
QMAKE_CXXFLAGS_WARN_ON += -Wno-old-style-cast
QMAKE_CXXFLAGS_WARN_ON += -Wno-sign-compare
QMAKE_CXXFLAGS_WARN_ON += -Wno-sign-conversion
QMAKE_CXXFLAGS_WARN_ON += -Wno-unused-const-variable
*-clang { # warning flags specific to clang
QMAKE_CXXFLAGS_WARN_ON += -Wempty-init-stmt
QMAKE_CXXFLAGS_WARN_ON += -Wignored-qualifiers
}
*-g++ { # warning flags specific to g++
QMAKE_CXXFLAGS_WARN_ON += -Wlogical-op
}
###############################################################################
# Detect/report errors in project structure #
###############################################################################
# error if project opened from within a ZIP archive (common mistake on Windows)
win32|win64 {
contains(PWD, .*\.zip.*) | contains(PWD, .*\.ZIP.*) {
message( "*******************************************************************" )
message( "*** ERROR: You are trying to open this project from within a ZIP archive." )
message( "*** You must first extract the files then open in Qt Creator." )
message( "*** In File Explorer open the ZIP and choose to Extract All." )
message( "*******************************************************************" )
error( Exiting. Extract project from ZIP first.)
}
}
# error if name of directory has chars that may cause trouble for qmake/make/shell
PROJECT_DIR = $$basename(PWD)
FOUND = $$PROJECT_DIR
FOUND ~= s|[a-z A-Z 0-9 _.+-]|| # yes, spaces ok, limited punctuation, $ % & are dicey
!isEmpty(FOUND) {
message( "*******************************************************************" )
message( "*** ERROR: The name of your project directory has disallowed characters." )
message( "*** The allowed characters are letters, numbers, and simple punctuation." )
message( "*** Your directory is named $$PROJECT_DIR which contains the" )
message( "*** disallowed characters: $$FOUND" )
message( "*** Please rename to a simple name such as Assignment_1 that contains" )
message( "*** no disallowed characters." )
message( "*******************************************************************" )
error(Exiting. Rename project directory to remove disallowed characters. )
}