我知道你可以让Xcode在其他项目中引用框架/静态lib构建目标,但如果你想引用的项目没有框架/静态lib目标,你可以直接引用另一个Xcode项目的源代码吗?我试图使用子项目和Xcode 4工作区来做到这一点无济于事.调整标题搜索路径后,所有#import语句都能正常工作,但我仍然会收到令人讨厌的编译器错误报告未找到的符号.
setenv MACOSX_DEPLOYMENT_TARGET 10.7
/Developer/usr/bin/clang -arch x86_64 -isysroot /Developer/SDKs/MacOSX10.7.sdk -L/Users/Tony/Library/Developer/Xcode/DerivedData/-bewprsseyzwgmsdpwvjfuzjiilap/Build/Products/Debug -F/Users/Tony/Library/Developer/Xcode/DerivedData/-bewprsseyzwgmsdpwvjfuzjiilap/Build/Products/Debug -filelist /Users/Tony/Library/Developer/Xcode/DerivedData/-bewprsseyzwgmsdpwvjfuzjiilap/Build/Intermediates/.build/Debug/.build/Objects-normal/x86_64/.LinkFileList -mmacosx-version-min=10.7 -fobjc-arc -framework Cocoa -o /Users/Tony/Library/Developer/Xcode/DerivedData/-bewprsseyzwgmsdpwvjfuzjiilap/Build/Products/Debug/.app/Contents/MacOS/
Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_MagicalRecordHelpers", referenced from:
objc-class-ref in AppDelegate.o
"_OBJC_CLASS_$_MRCoreDataAction", referenced from:
objc-class-ref in ItemsArrayController.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)
此外,这个新的Xcode 4工作区的处理是什么?它与子项目有何不同?我唯一能找到的是它们看起来与众不同......
工作区

子projct

我目前正在将 cvs 项目导入 git。
导入后,我想重写历史记录以将现有目录移动到单独的子模块中。
假设我有这样的结构:
file1
file2
file3
dir1
dir2
library
现在我想重写历史记录,以便该目录library始终是 git 子模块。比如说,将指定的目录拆分为它们自己的子模块/子项目
这是我当前的代码:
文件重写子模块(被调用)
cd project
git filter-branch --tree-filter $PWD/../$0-tree-filter --tag-name-filter cat -- --all
Run Code Online (Sandbox Code Playgroud)
文件重写子模块树过滤器
#!/bin/bash
函数 gitCommit()
{
取消设置 GIT_DIR
取消设置 GIT_WORK_TREE
git添加-A
if [ -n "$(git diff --cached --name-only)" ]
然后
# 需要提交的东西
git 提交 -F $_msg
菲
}
_git_dir=$GIT_DIR
_git_work_tree=$GIT_WORK_TREE
取消设置 GIT_DIR
取消设置 GIT_WORK_TREE
_dir=$PWD
如果[-d“库”]
然后
_msg=$(临时文件)
git 日志 ${GIT_COMMIT}^! --format="%B" > $_msg
git rm -r --缓存库
光盘库 … git url-rewriting subproject git-submodules git-filter-branch
一段时间以来,我一直在寻找这是否可行,但收效甚微。
使用 SBT,您能否以编程方式创建子项目,而无需将每个项目明确分配给它自己的项目val?
我当前的项目结构如下所示:
root/
common/ <--- This is another sub-project that others dependOn
project/
build.scala
src/main/scala
apps/ <--- sub-projects live here
Sub1/
Sub2/
Run Code Online (Sandbox Code Playgroud)
Sub1并且Sub2都是他们自己的 SBT 项目。
我第一次尝试将这些项目联系在一起是这样的:
// root/project/build.scala
import sbt._
import Keys._
object build extends Build {
lazy val common = project /* Pseudo-code */
val names = List("Sub1", "Sub2")
lazy val deps = names map { name =>
Project(id = name, base = file(s"apps/$name")).dependsOn(common)
}
lazy val finalDeps = common :: deps …Run Code Online (Sandbox Code Playgroud) 我的 Xcode 项目“MyMainApp”有一个名为“MyLib”的静态库类型 Xcode 子项目。现在我需要在我的 iOS 应用程序中使用一些第三方 iOS 框架。我只想将它们添加/链接到 MyLib 而不是 MyMainApp,这样我就可以使 MyLib 可重用且独立,以便在我的其他 iOS 应用程序中使用它。MyMainApp 中的一些视图控制器使用属于 MyLib 的视图控制器之一。MyLib 中的此视图控制器使用第三方框架内的类的功能。现在我面临的问题是,如果我将第三方框架添加到 MyLib 而不是将它们添加到 MyMainApp,我会收到链接器错误“词法或预处理器问题。未找到 XXX.h 文件”。如果我将框架添加到 MyMainApp 和 MyLib 中,一切都会正常运行,但这不是我想要的。我已确保框架搜索路径和标头搜索路径是正确的。在这种情况下,我无法找到苹果公司的任何参考资料。我想知道将第三方框架和库添加/链接到静态库类型的 Xcode 子项目的最佳实践。还有解决方案可以克服链接器错误并将框架仅添加到静态库项目吗?
假设我有一个项目有两个独立的子项目.如果我正确地理解了cmake,那么想法是让一个根CMakeLists.txt定义a project(...)然后使用add_subdirectory(...)包含子项目.每个子项目都有CMakeLists.txt自己的项目定义.这样,项目可以一起构建(使用根cmake文件),也可以单独构建(使用子项目cmake文件).
我现在想改变CMAKE_CONFIGURATION_TYPES.我应该在根目录CMakeLists.txt或每个子项目中执行此操作,还是两者都执行此操作?
在根中更改它意味着单独构建子项目将提供错误的配置类型; 其他选项会复制cmake代码.我想我在这里遗漏了一些东西.
我知道我可以用来gradle tasks列出根项目的任务。我继承了一个庞大的项目,其中有数十个 4-5 级深度的子项目。许多任务是动态创建的。
如何列出特定子项目可用的任务?
我有一个依赖问题,我不知道如何解决它.
我有一个项目A,B和C.
A需要B和C.
B需要C
我的目录结构如下所示:
A
|-settings.gradle
|-build.gradle
|-lib
|- B
|- C
Run Code Online (Sandbox Code Playgroud)
settings.gradle内容:
include 'lib/B'
include 'lib/C'
Run Code Online (Sandbox Code Playgroud)
build.gradle内容:
apply plugin: 'java'
dependencies {
compile project(':lib/B'),
project(':lib/C')
}
project(':lib/B'){
dependencies {
compile project(':lib/C')
}
}
Run Code Online (Sandbox Code Playgroud)
如果我不声明项目(':lib/B'){...}部分,则由于依赖性而无法构建项目B.
如果我声明项目(':lib/B'){...}部分,Gradle告诉我:无法在org.gradle.api.internal上找到参数[project':lib/C']的方法compile() .artifacts.dsl.pendencies.DefaultDependencyHandler_Decorated @ 221bad.
我怎么能解决它,或者在B之前编译C?
PS:数据结构更改是不可能的.
我创建了一个自定义herpderpGradle任务:
task herpderp(type: HerpDerpTask)
class HerpDerpTask extends DefaultTask {
@TaskAction
def herpderp() {
println "Herp derp!"
}
}
Run Code Online (Sandbox Code Playgroud)
有了这个,我可以将此任务添加到其他Gradle构建中,在其他项目的构建调用中使用它:
gradle clean build herpderp
Run Code Online (Sandbox Code Playgroud)
现在,我有以下多项目设置:
myapp/
myapp-client/
build.gradle
src/** (omitted for brevity)
myapp-shared/
build.gradle
src/** (omitted for brevity)
myapp-server
build.gradle
src/** (omitted for brevity)
build.gradle
settings.gradle
Run Code Online (Sandbox Code Playgroud)
在哪里myapp/build.gradle:
subprojects {
apply plugin: 'groovy'
sourceCompatibility = '1.7'
targetCompatibility = '1.7'
repositories {
mavenLocal()
mavenCentral()
}
dependencies {
compile (
'org.codehaus.groovy:groovy-all:2.3.7'
)
}
}
Run Code Online (Sandbox Code Playgroud)
在哪里myapp/settings.gradle:
include ':myapp-shared'
include …Run Code Online (Sandbox Code Playgroud) 我有即两个仓库A和B.错误地,我在我的机器上克隆了A里面的回购B. 我从repo B中删除了所有代码但是当我从A上推送并合并我的代码时,它还显示了BGithub repo上的子项目提交.
我想从我的master上删除子项目提交.这些步骤会起作用吗?
1. rmdir B (on my local repo A)
2. Pushing my repo A to origin
3. Merging
我有 2 个项目(prj1 和 prj2)。一个 (prj2) 依赖于另一个 (prj1),后者是一个静态库。我来用 CMake 分别编译它们。
但我需要将一个 (prj1) 集成到另一个 (prj2)。所以我希望CMake在另一个(prj2)之前编译静态库(prj1),然后链接静态库。我尝试了一些东西,但 id 没有用。
在 prj2 中,externals/core 是一个 git 子模块(对于非 git 用户,您可以将此目录视为 prj1 的复制粘贴)。我在prj2“SDL2”中尝试了(没有成功)这个CMakeLists.txt:
cmake_minimum_required(VERSION 2.8)
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU" OR
"${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
set(CMAKE_CXX_FLAGS "-Wall -Wextra -Wformat=2 -Wpedantic -D_FORTIFY_SOURCE=2")
set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g")
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
# TODO
endif()
set(CMAKE_CXX_FLAGS "-std=c++11 ${CMAKE_CXX_FLAGS}")
# if (CMAKE_VERSION VERSION_LESS "3.1")
# if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU" OR
# CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
# set (CMAKE_CXX_FLAGS …Run Code Online (Sandbox Code Playgroud) 我想避免冗余,因此得到了一个包含以下内容的“共享”项目:
plugins {
id "org.flywaydb.flyway" version "4.2.0"
}
repositories {
mavenCentral()
jcenter()
}
apply plugin: "java"
dependencies {
compile "commons-io:commons-io:2.4"
// ...
}
Run Code Online (Sandbox Code Playgroud)
然后,我还有一些常规项目,它们可以从共享项目中继承编译依赖关系,如下所示:
apply plugin: "java"
repositories {
mavenCentral()
jcenter()
}
dependencies {
compile project(":shared")
testCompile project(":shared")
}
Run Code Online (Sandbox Code Playgroud)
有什么方法可以使我的常规项目继承插件块或实际插件?
我的应用程序是一个 Gradle 多模块项目,由多个服务和一个服务通用模块组成。
\n\nI\xc2\xb4ve 将所有模块共有的所有依赖项提取到根 build.gradle 中,并且我还想在所有子项目中包含service-common模块,这在理论上是可行的,但 I\xc2\xb4m 得到了循环依赖问题,因为它包含在其自身中。
\n\napply plugin: \'java\'\n\ngroup = \'com.myapplication\'\n\next {\n set(\'springCloudVersion\', "2.2.0.RELEASE")\n set(\'springBootVersion\', "2.2.2.RELEASE")\n}\n\nallprojects {\n\n repositories {\n jcenter()\n mavenCentral()\n maven { url \'https://repo.spring.io/milestone\' }\n }\n\n}\n\nbuildscript {\n ext {\n springBootVersion = "2.2.2.RELEASE"\n }\n\n repositories {\n maven { url \'https://repo.spring.io/plugins-snapshot\' }\n jcenter()\n mavenCentral()\n }\n\n dependencies {\n classpath \'io.spring.gradle:dependency-management-plugin:1.0.7.BUILD-SNAPSHOT\'\n classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")\n }\n}\n\nsubprojects {\n version = \'1.0\'\n\n apply plugin: \'org.springframework.boot\'\n apply plugin: "io.spring.dependency-management"\n apply plugin: \'java\'\n\n ext {\n springCloudVersion = "2.2.0.RELEASE"\n springBootVersion = "2.2.2.RELEASE"\n }\n\n …Run Code Online (Sandbox Code Playgroud) subproject ×12
gradle ×5
cmake ×2
compilation ×2
git ×2
xcode ×2
build ×1
dependencies ×1
flyway ×1
git-commit ×1
github ×1
ios ×1
java ×1
linker ×1
multi-module ×1
reflection ×1
sbt ×1
scala ×1
spring ×1
workspace ×1