📄 unixmake2.cpp
字号:
if(project->isActiveConfig("lib_version_first")) { project->variables()["TARGET_x"].append("lib" + project->first("TARGET") + "." + project->first("VER_MAJ") + "." + project->first("QMAKE_EXTENSION_SHLIB")); project->variables()["TARGET_x.y"].append("lib" + project->first("TARGET") + "." + project->first("VER_MAJ") + "." + project->first("VER_MIN") + "." + project->first("QMAKE_EXTENSION_SHLIB")); project->variables()["TARGET_x.y.z"].append("lib" + project->first("TARGET") + "." + project->first("VER_MAJ") + "." + project->first("VER_MIN") + "." + project->first("VER_PAT") + "." + project->first("QMAKE_EXTENSION_SHLIB")); } else { project->variables()["TARGET_x"].append("lib" + project->first("TARGET") + "." + project->first("QMAKE_EXTENSION_SHLIB") + "." + project->first("VER_MAJ")); project->variables()["TARGET_x.y"].append("lib" + project->first("TARGET") + "." + project->first("QMAKE_EXTENSION_SHLIB") + "." + project->first("VER_MAJ") + "." + project->first("VER_MIN")); project->variables()["TARGET_x.y.z"].append("lib" + project->first("TARGET") + "." + project->first("QMAKE_EXTENSION_SHLIB") + "." + project->first("VER_MAJ") + "." + project->first("VER_MIN") + "." + project->first("VER_PAT")); } project->variables()["TARGET"] = project->variables()["TARGET_x.y.z"]; } else { project->variables()["TARGET_"].append("lib" + project->first("TARGET") + "." + project->first("QMAKE_EXTENSION_SHLIB")); if(project->isActiveConfig("lib_version_first")) { project->variables()["TARGET_x"].append("lib" + project->first("TARGET") + "." + project->first("VER_MAJ") + "." + project->first("QMAKE_EXTENSION_SHLIB")); project->variables()["TARGET_x.y"].append("lib" + project->first("TARGET") + "." + project->first("VER_MAJ") + "." + project->first("VER_MIN") + "." + project->first("QMAKE_EXTENSION_SHLIB")); project->variables()["TARGET_x.y.z"].append("lib" + project->first("TARGET") + "." + project->first("VER_MAJ") + "." + project->first("VER_MIN") + "." + project->first("VER_PAT") + "." + project->variables()["QMAKE_EXTENSION_SHLIB"].first()); } else { project->variables()["TARGET_x"].append("lib" + project->first("TARGET") + "." + project->first("QMAKE_EXTENSION_SHLIB") + "." + project->first("VER_MAJ")); project->variables()["TARGET_x.y"].append("lib" + project->first("TARGET") + "." + project->first("QMAKE_EXTENSION_SHLIB") + "." + project->first("VER_MAJ") + "." + project->first("VER_MIN")); project->variables()["TARGET_x.y.z"].append("lib" + project->first("TARGET") + "." + project->variables()[ "QMAKE_EXTENSION_SHLIB"].first() + "." + project->first("VER_MAJ") + "." + project->first("VER_MIN") + "." + project->first("VER_PAT")); } project->variables()["TARGET"] = project->variables()["TARGET_x.y.z"]; } if(project->isEmpty("QMAKE_LN_SHLIB")) project->variables()["QMAKE_LN_SHLIB"].append("ln -s"); project->variables()["DESTDIR_TARGET"].append("$(TARGET)"); if ( !project->variables()["DESTDIR"].isEmpty() ) project->variables()["DESTDIR_TARGET"].first().prepend(project->first("DESTDIR")); if ( !project->variables()["QMAKE_LFLAGS_SONAME"].isEmpty()) { if(project->isActiveConfig("plugin")) { if(!project->variables()["TARGET"].isEmpty() ) project->variables()["QMAKE_LFLAGS_SONAME"].first() += project->first("TARGET"); } else { if(!project->variables()["TARGET_x"].isEmpty() ) project->variables()["QMAKE_LFLAGS_SONAME"].first() += project->first("TARGET_x"); } } if ( project->variables()["QMAKE_LINK_SHLIB_CMD"].isEmpty() ) project->variables()["QMAKE_LINK_SHLIB_CMD"].append( "$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(OBJMOC) $(LIBS) $(OBJCOMP)"); } if(project->isEmpty("QMAKE_SYMBOLIC_LINK")) project->variables()["QMAKE_SYMBOLIC_LINK"].append("ln -sf"); if ( !project->variables()["QMAKE_APP_FLAG"].isEmpty() ) { project->variables()["QMAKE_LFLAGS"] += project->variables()["QMAKE_LFLAGS_APP"]; } else if ( project->isActiveConfig("dll") ) { 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_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"]; } QString destdir = project->first("DESTDIR"); if ( !destdir.isEmpty() && !project->variables()["QMAKE_RPATH"].isEmpty() ) { QString rpath_destdir = destdir; if(QDir::isRelativePath(rpath_destdir)) { QFileInfo fi(Option::fixPathToLocalOS(rpath_destdir)); if(fi.convertToAbs()) //strange, shouldn't really happen rpath_destdir = Option::fixPathToTargetOS(rpath_destdir, FALSE); else rpath_destdir = fi.filePath(); } else { rpath_destdir = Option::fixPathToTargetOS(rpath_destdir, FALSE); } project->variables()["QMAKE_LFLAGS"] += project->first("QMAKE_RPATH") + rpath_destdir; } } QStringList &quc = project->variables()["QMAKE_EXTRA_UNIX_COMPILERS"]; for(QStringList::Iterator it = quc.begin(); it != quc.end(); ++it) { QString tmp_out = project->variables()[(*it) + ".output"].first(); if(tmp_out.isEmpty()) continue; QStringList &tmp = project->variables()[(*it) + ".input"]; for(QStringList::Iterator it2 = tmp.begin(); it2 != tmp.end(); ++it2) { QStringList &inputs = project->variables()[(*it2)]; for(QStringList::Iterator input = inputs.begin(); input != inputs.end(); ++input) { QFileInfo fi(Option::fixPathToLocalOS((*input))); QString in = Option::fixPathToTargetOS((*input), FALSE), out = tmp_out; out.replace("${QMAKE_FILE_BASE}", fi.baseName()); out.replace("${QMAKE_FILE_NAME}", fi.fileName()); if(project->variables()[(*it) + ".CONFIG"].findIndex("no_link") == -1) project->variables()["OBJCOMP"] += out; } } }}QStringUnixMakefileGenerator::libtoolFileName(){ QString ret = var("TARGET"); int slsh = ret.findRev(Option::dir_sep); if(slsh != -1) ret = ret.right(ret.length() - slsh); int dot = ret.find('.'); if(dot != -1) ret = ret.left(dot); ret += Option::libtool_ext; if(!project->isEmpty("DESTDIR")) ret.prepend(var("DESTDIR")); return ret;}voidUnixMakefileGenerator::writeLibtoolFile(){ QString fname = libtoolFileName(), lname = fname; int slsh = lname.findRev(Option::dir_sep); if(slsh != -1) lname = lname.right(lname.length() - slsh); QFile ft(fname); if(!ft.open(IO_WriteOnly)) return; project->variables()["ALL_DEPS"].append(fname); QTextStream t(&ft); t << "# " << lname << Option::libtool_ext << " - a libtool library file\n"; time_t now = time(NULL); t << "# Generated by qmake/libtool (" << qmake_version() << ") (Qt " << QT_VERSION_STR << ") on: " << ctime(&now) << "\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 << ".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.findRev(Option::dir_sep); if(slsh != -1) ret = ret.right(ret.length() - slsh); if(ret.startsWith("lib")) ret = ret.mid(3); int dot = ret.find('.'); if(dot != -1) ret = ret.left(dot); ret += Option::pkgcfg_ext; if(!project->isEmpty("DESTDIR")) { ret.prepend(var("DESTDIR")); ret = Option::fixPathToLocalOS(fileFixify(ret,QDir::currentDirPath(), Option::output_dir)); } return ret;}voidUnixMakefileGenerator::writePkgConfigFile() // ### does make sense only for libqt so far{ QString fname = pkgConfigFileName(), lname = fname; int slsh = lname.findRev(Option::dir_sep); if(slsh != -1) lname = lname.right(lname.length() - slsh); QFile ft(fname); if(!ft.open(IO_WriteOnly)) return; project->variables()["ALL_DEPS"].append(fname); QTextStream t(&ft); QString prefix = qInstallPath(); QString libDir = prefix + "/lib"; QString includeDir = prefix + "/include"; t << "prefix=" << libDir << endl; t << "exec_prefix=${prefix}\n" << "libdir=${exec_prefix}/lib\n" << "includedir=${prefix}/include" << endl; // non-standard entry. Provides useful info normally only // contained in the internal .qmake.cache file t << varGlue("CONFIG", "qt_config=", " ", "") << endl << endl; t << "Name: Qt" << endl; t << "Description: Qt GUI Library" << endl; t << "Version: " << project->first("VERSION") << endl; // libs QStringList libs; if(!project->isEmpty("QMAKE_INTERNAL_PRL_LIBS")) libs = project->variables()["QMAKE_INTERNAL_PRL_LIBS"]; else libs << "QMAKE_LIBS"; //obvious one if(project->isActiveConfig("thread")) libs << "QMAKE_LFLAGS_THREAD"; //not sure about this one, but what about things like -pthread? t << "Libs: -L" << libDir << " -l" << lname << " "; for(QStringList::ConstIterator it = libs.begin(); it != libs.end(); ++it) t << project->variables()[(*it)].join(" ") << " "; t << endl; // flags // ### too many t << "Cflags: " // << var("QMAKE_CXXFLAGS") << " " << varGlue("PRL_EXPORT_DEFINES","-D"," -D"," ") << project->variables()["PRL_EXPORT_CXXFLAGS"].join(" ") // << varGlue("DEFINES","-D"," -D"," ") << " -I" << includeDir;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -