Настройки проекта Qt qbs с ошибкой компиляции библиотеки не найдены

Я работаю над проектом, который имеет несколько уровней. Лично я новичок в qbs, и на внутреннем сайте не так много документов и примеров о qbs.

среда:

Qt5.6.1; Qt Creator 4.01; Ubuntu 16.04; Qbs 1.5.1

Вот иерархия проекта. На верхнем уровне у него есть project.qbs:

import qbs
import qbs.File
Project{
var binaries = [
"component1/component1.qbs",
"component2/component2.qbs",
"subpro/subpro.qbs",         // <- 1. the project I am working on
"ourlib/ourlib.qbs",         // <- 2. the library I am using
]
return binaries
}

Subpro.qbs выглядит примерно так:

import qbs
Project {
name: subpro
references:[
"app1/app1.qbs""app2/app2.qbs""myapp/myapp.qbs"          //<- 3. the application I am working on
]

}

Myapp.qbs похож на:

import qbs
CppApplication{
type: "application"name: "myapp"Group{
name: "project-install"fileTagsFilter: "application"qbs.install: false
qbs.install: "bin"}
Depends {name:"cpp"}
Depends {name:"blah1"}
Depends {name:"ourlib"}

cpp.libraryPaths:["path_of_lib3rdParty"] // 4. set the 3rd party lib path
cpp.staticLibraries:["lib3rdParty.a"]    // 5. set the 3rd party lib name

files["myapp.cpp","f2"...]
}

наконец, QBS для нашей библиотеки:

import qbs
DynamicLibrary{
name: "ourlib"Group{
name: "project-install"fileTagsFilter: "dynamiclibrary"qbs.install: false
qbs.installDir: "debug"}

Depends {name: "cpp"}
cpp.includePath:["..."]
cpp.libraryPaths:["path_of_lib3rdParty"] // 6. same as 4
cpp.staticLibraries:["lib3rdParty.a"]    // 7. same as 5
}

Когда я запускаю «qbs debug» в корневой папке проекта.
QBS показывает:

linking ourlib.so
compiling myapp.cpp
ERROR: ...
/usr/bin/ld: cannot find -llib3rdParty_s.a

Итак, основываясь на сообщении об ошибке, qbs не удалось собрать myapp.cpp и попытаться найти lib3rdParty в проекте myapp. Я добавил 4 и 5, все еще с той же ошибкой. Кажется, 6 и 7 правильны, так как нет ошибки связывания от ourlib.so. Как мне настроить qbs, чтобы процесс сборки работал?

Другой вопрос по поводу ключевого слова «ссылки». Могу ли я ссылаться на другой файл QBS на любом уровне проекта? Как это работает? Я получил тот же вопрос о «Зависит», а также.

Спасибо

Rong

2

Решение

cpp.dynamicLibraries а также cpp.staticLibraries свойства взять список библиотеки имена быть связанными, то есть имя библиотеки без lib префикс или .so суффикс.

Например, вы бы использовали:

cpp.libraryPaths: ["/home/r0ng/tools/myapp/libs/relic/lib"]
cpp.dynamicLibraries: ["relic"]

Однако, так как у вас уже есть полный путь к файлу динамической библиотеки, которую вы хотите связать, вы можете просто передать полный путь к файлу без указания cpp.libraryPaths вообще, вот так:

cpp.dynamicLibraries: ["/home/r0ng/tools/myapp/libs/relic/lib/librelic.so"]

Этот второй метод предпочтителен, потому что он указывает точную библиотеку для ссылки, а не полагается на путь поиска, который не обязательно может выбрать тип библиотеки, которую вы ожидаете (если существует как статическая, так и динамическая версия).

Я признаю, что наш cpp.dynamicLibraries а также cpp.staticLibraries свойства должны быть лучше задокументированы, чтобы объяснить их предполагаемое использование.


относительно referencesДа, вы можете ссылаться на любой путь к файлу независимо от его расположения в файловой системе.


относительно Dependsэтот предмет name Свойство указывает имя продукта или модуля, от которого создается зависимость. Такой продукт или модуль уже должен присутствовать в дереве вашего проекта, например, был загружен в результате использования qbsSearchPaths или же references свойства.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]