📄 unixmake2.cpp
字号:
if(!project->variables()["TARGET"].isEmpty())
soname += project->first("TARGET");
} else if(!project->isEmpty("QMAKE_BUNDLE_NAME")) {
soname += project->first("TARGET_x.y");
} else if(!project->variables()["TARGET_x"].isEmpty()) {
soname += project->first("TARGET_x");
}
if(!soname.isEmpty()) {
if(project->isActiveConfig("absolute_library_soname") &&
project->values("INSTALLS").indexOf("target") != -1 &&
!project->isEmpty("target.path")) {
QString instpath = Option::fixPathToTargetOS(project->first("target.path"));
if(!instpath.endsWith(Option::dir_sep))
instpath += Option::dir_sep;
soname.prepend(instpath);
}
project->variables()["QMAKE_LFLAGS_SONAME"].first() += soname;
}
}
if (project->variables()["QMAKE_LINK_SHLIB_CMD"].isEmpty())
project->variables()["QMAKE_LINK_SHLIB_CMD"].append(
"$(LINK) $(LFLAGS) -o $(TARGET) $(OBJECTS) $(LIBS) $(OBJCOMP)");
}
if (!project->variables()["QMAKE_APP_FLAG"].isEmpty()) {
project->variables()["QMAKE_CFLAGS"] += project->variables()["QMAKE_CFLAGS_APP"];
project->variables()["QMAKE_CXXFLAGS"] += project->variables()["QMAKE_CXXFLAGS_APP"];
project->variables()["QMAKE_LFLAGS"] += project->variables()["QMAKE_LFLAGS_APP"];
} else if (project->isActiveConfig("dll")) {
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();
}
}
}
}
}
QString
UnixMakefileGenerator::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;
}
void
UnixMakefileGenerator::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";
}
QString
UnixMakefileGenerator::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;
}
QString
UnixMakefileGenerator::pkgConfigPrefix() const
{
if(!project->isEmpty("QMAKE_PKGCONFIG_PREFIX"))
return project->first("QMAKE_PKGCONFIG_PREFIX");
return QLibraryInfo::location(QLibraryInfo::PrefixPath);
}
QString
UnixMakefileGenerator::pkgConfigFixPath(QString path) const
{
QString prefix = pkgConfigPrefix();
if(path.startsWith(prefix))
path = path.replace(prefix, "${prefix}");
return path;
}
void
UnixMakefileGenerator::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=" << pkgConfigFixPa
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -