📄 unixmake2.cpp
字号:
if(!project->isActiveConfig("plugin") || !project->isActiveConfig("plugin_no_share_shlib_cflags")) { project->variables()["QMAKE_CFLAGS"] += project->variables()["QMAKE_CFLAGS_SHLIB"]; project->variables()["QMAKE_CXXFLAGS"] += project->variables()["QMAKE_CXXFLAGS_SHLIB"]; } if (project->isActiveConfig("plugin")) { project->variables()["QMAKE_CFLAGS"] += project->variables()["QMAKE_CFLAGS_PLUGIN"]; project->variables()["QMAKE_CXXFLAGS"] += project->variables()["QMAKE_CXXFLAGS_PLUGIN"]; project->variables()["QMAKE_LFLAGS"] += project->variables()["QMAKE_LFLAGS_PLUGIN"]; if(project->isActiveConfig("plugin_with_soname") && !project->isActiveConfig("compile_libtool")) project->variables()["QMAKE_LFLAGS"] += project->variables()["QMAKE_LFLAGS_SONAME"]; } else { project->variables()["QMAKE_LFLAGS"] += project->variables()["QMAKE_LFLAGS_SHLIB"]; if(!project->isEmpty("QMAKE_LFLAGS_COMPAT_VERSION")) { if(project->isEmpty("COMPAT_VERSION")) project->variables()["QMAKE_LFLAGS"] += QString(project->first("QMAKE_LFLAGS_COMPAT_VERSION") + project->first("VER_MAJ") + "." + project->first("VER_MIN")); else project->variables()["QMAKE_LFLAGS"] += QString(project->first("QMAKE_LFLAGS_COMPAT_VERSION") + project->first("COMPATIBILITY_VERSION")); } if(!project->isEmpty("QMAKE_LFLAGS_VERSION")) { project->variables()["QMAKE_LFLAGS"] += QString(project->first("QMAKE_LFLAGS_VERSION") + project->first("VER_MAJ") + "." + project->first("VER_MIN") + "." + project->first("VER_PAT")); } if(!project->isActiveConfig("compile_libtool")) project->variables()["QMAKE_LFLAGS"] += project->variables()["QMAKE_LFLAGS_SONAME"]; } } if(!project->isEmpty("QMAKE_BUNDLE_NAME")) { QString plist = fileFixify(project->first("QMAKE_INFO_PLIST")); if(plist.isEmpty()) plist = specdir() + QDir::separator() + "Info.plist." + project->first("TEMPLATE"); if(exists(Option::fixPathToLocalOS(plist))) { if(project->isEmpty("QMAKE_INFO_PLIST")) project->variables()["QMAKE_INFO_PLIST"].append(plist); project->variables()["QMAKE_INFO_PLIST_OUT"].append(project->first("DESTDIR") + project->first("QMAKE_BUNDLE_NAME") + "/Contents/Info.plist"); project->variables()["ALL_DEPS"] += project->first("QMAKE_INFO_PLIST_OUT"); if(!project->isEmpty("ICON") && project->first("TEMPLATE") == "app") project->variables()["ALL_DEPS"] += project->first("DESTDIR") + project->first("QMAKE_BUNDLE_NAME") + "/Contents/Resources/" + project->first("ICON").section('/', -1); if(!project->isEmpty("QMAKE_BUNDLE_DATA")) { QString bundle_dir = project->first("DESTDIR") + project->first("QMAKE_BUNDLE_NAME") + "/"; QStringList &alldeps = project->variables()["ALL_DEPS"]; const QStringList &bundle_data = project->variables()["QMAKE_BUNDLE_DATA"]; for(int i = 0; i < bundle_data.count(); i++) { const QStringList &files = project->variables()[bundle_data[i] + ".files"]; QString path = bundle_dir; if(!project->isEmpty(bundle_data[i] + ".version")) { alldeps += Option::fixPathToLocalOS(path + Option::dir_sep + project->first(bundle_data[i] + ".path")); path += project->first(bundle_data[i] + ".version") + "/" + project->first("QMAKE_FRAMEWORK_VERSION") + "/"; } path += project->first(bundle_data[i] + ".path"); path = Option::fixPathToLocalOS(path); for(int file = 0; file < files.count(); file++) alldeps += path + Option::dir_sep + fileInfo(files[file]).fileName(); } } } }}QStringUnixMakefileGenerator::libtoolFileName(){ QString ret = var("TARGET"); int slsh = ret.lastIndexOf(Option::dir_sep); if(slsh != -1) ret = ret.right(ret.length() - slsh - 1); int dot = ret.indexOf('.'); if(dot != -1) ret = ret.left(dot); ret += Option::libtool_ext; if(!project->isEmpty("DESTDIR")) { ret.prepend(var("DESTDIR")); ret = Option::fixPathToLocalOS(fileFixify(ret, qmake_getpwd(), Option::output_dir)); } return ret;}voidUnixMakefileGenerator::writeLibtoolFile(){ QString fname = libtoolFileName(), lname = fname; int slsh = lname.lastIndexOf(Option::dir_sep); if(slsh != -1) lname = lname.right(lname.length() - slsh - 1); QFile ft(fname); if(!ft.open(QIODevice::WriteOnly)) return; project->variables()["ALL_DEPS"].append(fileFixify(fname)); QTextStream t(&ft); t << "# " << lname << " - a libtool library file\n"; t << "# Generated by qmake/libtool (" << qmake_version() << ") (Qt " << QT_VERSION_STR << ") on: " << QDateTime::currentDateTime().toString(); t << "\n"; t << "# The name that we can dlopen(3).\n" << "dlname='" << var(project->isActiveConfig("plugin") ? "TARGET" : "TARGET_x") << "'\n\n"; t << "# Names of this library.\n"; t << "library_names='"; if(project->isActiveConfig("plugin")) { t << var("TARGET"); } else { if (project->isEmpty("QMAKE_HPUX_SHLIB")) t << var("TARGET_x.y.z") << " "; t << var("TARGET_x") << " " << var("TARGET_"); } t << "'\n\n"; t << "# The name of the static archive.\n" << "old_library='" << lname.left(lname.length()-Option::libtool_ext.length()) << ".a'\n\n"; t << "# Libraries that this one depends upon.\n"; QStringList libs; if(!project->isEmpty("QMAKE_INTERNAL_PRL_LIBS")) libs = project->variables()["QMAKE_INTERNAL_PRL_LIBS"]; else libs << "QMAKE_LIBS"; //obvious one t << "dependency_libs='"; for(QStringList::ConstIterator it = libs.begin(); it != libs.end(); ++it) t << project->variables()[(*it)].join(" ") << " "; t << "'\n\n"; t << "# Version information for " << lname << "\n"; int maj = project->first("VER_MAJ").toInt(); int min = project->first("VER_MIN").toInt(); int pat = project->first("VER_PAT").toInt(); t << "current=" << (10*maj + min) << "\n" // best I can think of << "age=0\n" << "revision=" << pat << "\n\n"; t << "# Is this an already installed library.\n" "installed=yes\n\n"; // ### t << "# Files to dlopen/dlpreopen.\n" "dlopen=''\n" "dlpreopen=''\n\n"; QString install_dir = project->first("target.path"); if(install_dir.isEmpty()) install_dir = project->first("DESTDIR"); t << "# Directory that this library needs to be installed in:\n" "libdir='" << Option::fixPathToTargetOS(install_dir, false) << "'\n";}QStringUnixMakefileGenerator::pkgConfigFileName(){ QString ret = var("TARGET"); int slsh = ret.lastIndexOf(Option::dir_sep); if(slsh != -1) ret = ret.right(ret.length() - slsh - 1); if(ret.startsWith("lib")) ret = ret.mid(3); int dot = ret.indexOf('.'); if(dot != -1) ret = ret.left(dot); ret += Option::pkgcfg_ext; if(!project->isEmpty("DESTDIR")) { ret.prepend(var("DESTDIR")); ret = Option::fixPathToLocalOS(fileFixify(ret, qmake_getpwd(), Option::output_dir)); } return ret;}QStringUnixMakefileGenerator::pkgConfigPrefix() const{ if(!project->isEmpty("QMAKE_PKGCONFIG_PREFIX")) return project->first("QMAKE_PKGCONFIG_PREFIX"); return QLibraryInfo::location(QLibraryInfo::PrefixPath);}QStringUnixMakefileGenerator::pkgConfigFixPath(QString path) const{ QString prefix = pkgConfigPrefix(); if(path.startsWith(prefix)) path = path.replace(prefix, "${prefix}"); return path;}voidUnixMakefileGenerator::writePkgConfigFile() // ### does make sense only for libqt so far{ QString fname = pkgConfigFileName(), lname = fname; int slsh = lname.lastIndexOf(Option::dir_sep); if(slsh != -1) lname = lname.right(lname.length() - slsh - 1); QFile ft(fname); if(!ft.open(QIODevice::WriteOnly)) return; project->variables()["ALL_DEPS"].append(fileFixify(fname)); QTextStream t(&ft); QString prefix = pkgConfigPrefix(); QString libDir = project->first("QMAKE_PKGCONFIG_LIBDIR"); if(libDir.isEmpty()) libDir = prefix + Option::dir_sep + "lib" + Option::dir_sep; QString includeDir = project->first("QMAKE_PKGCONFIG_INCDIR"); if(includeDir.isEmpty()) includeDir = prefix + "/include"; t << "prefix=" << prefix << endl; t << "exec_prefix=${prefix}\n" << "libdir=" << pkgConfigFixPath(libDir) << "\n" << "includedir=" << pkgConfigFixPath(includeDir) << endl; // non-standard entry. Provides useful info normally only // contained in the internal .qmake.cache file t << varGlue("CONFIG", "qt_config=", " ", "") << endl << endl; QString name = project->first("QMAKE_PKGCONFIG_NAME"); if(name.isEmpty()) { name = project->first("QMAKE_ORIG_TARGET").toLower(); name.replace(0, 1, name[0].toUpper()); } t << "Name: " << name << endl; QString desc = project->variables()["QMAKE_PKGCONFIG_DESCRIPTION"].join(" "); if(desc.isEmpty()) { if(name.isEmpty()) { desc = project->first("QMAKE_ORIG_TARGET").toLower(); desc.replace(0, 1, desc[0].toUpper()); } else { desc = name; } if(project->first("TEMPLATE") == "lib") { if(project->isActiveConfig("plugin")) desc += " Plugin"; else desc += " Library"; } else if(project->first("TEMPLATE") == "app") { desc += " Application"; } } t << "Description: " << desc << endl; t << "Version: " << project->first("VERSION") << endl; // libs QStringList libs; if(!project->isEmpty("QMAKE_INTERNAL_PRL_LIBS")) libs = pro
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -