正如你可能已经发现,CodeLite允许你从设置更改下拉菜单中 项目的类型 - >一般 - >项目类型。
但是,这样做并不会更改项目目标的名称。所以,如果 你开始把你的项目作为一个可执行myprog
- 从中,也就是说, 调试版本产生./Debug/myprog
的项目文件夹下 - 那么 您更改项目类型静态库并重建它,调试 版本将仍然生成./Debug/myprog
,但该文件实际上现在实际上是 是一个静态库,缺少通用的lib
-prefix和.a
扩展名。
为了让输出文件的常规静态库的名字 - libmyprog.a
- 你需要重新回到设置 - >一般和 变化输出从文件:
$(IntermediateDirectory)/$(ProjectName)
到:
$(IntermediateDirectory)/lib$(ProjectName).a
然后重建项目和它会输出一个目标是一个静态的 库和看起来像一个。
当然,你必须对项目设置相同的变化都 的调试和如果你想让他们都生产具有相同的文件类型和文件名 目标释放配置。
但是...
如果将程序项目转换为静态库项目的方式不是 看起来很光滑,那可能是因为它是非常少用的转换。
在转换后产生的将仅包含该程序是从建立在同一对象 文件,包括定义 原始程序的main
函数的对象文件中的静态库。假设目标文件 为main.o
,并且它定义了链接器可以看到的0个或更多其他函数。
任何其他程序,newprog
,即与静态库链接必须提供 自己的main
功能在不同的目标文件,所以在任何这样的联动 两件事情一定会发生: -
newprog
的链接不需要在libmyprog.a(main.o)
, 中定义的任何函数,所以libmyprog.a(main.o)
未链接并且可能不存在。
的newprog
联动并需要一些功能,foo
,在libmyprog.a(main.o)
定义, 所以libmyprog.a(main.o)
是联;那么以及foo
的定义, 程序链接main
的重复定义 - 它自己的定义加上libmyprog.a(main.o)
中的 。重复的定义是一个错误,所以连接失败。
把一些程序的main
函数的定义为静态 库的成员是没有意义的,因为如果是以往任何时候都需要在另一个 程序的联动装置成员,那么它的联动将失败。
所以你的程序项目转换为静态库项目需要事先给转换一些 重构: -
你要做的是重构从原始程序的源代码 一堆适合于建设成为一个静态库的源文件中提取。
假设你这样做,创建一个静态库 CodeLite的简单的方法是创建一个项目为此目的并在新建项目向导 选择图书馆 - >静态库作为项目类型而不是某种 的可执行文件。
然后只需将新的或现有的源文件添加到静态库项目 ,直到它包含您希望库提供的所有函数的定义。构建,测试,调试,编辑...直到完成。
我建议开始学习cmake。它可以帮助你解决多个问题,并且如果正确写入,它将简化用户的生活。 – Incomputable
@Incomputable,谢谢你不是第一个。但我不是一个软件开发人员,非常喜欢IDE和他们带来的简化。我确信有一种简单的方法可以配置CodeLite来为我做这件事,但我根本无法找到它。 – raggot