我想要一个使用自动工具构建的c库。 老实说,我几乎不知道它们如何工作:/ (我需要的库是“ https://github.com/p4lang/PI”)
我已经执行了./configure等脚本并成功安装了它。
当我搜索usr时,在/usr/local/lib/libpi.a下找到该库 和类似的/ usr / local / include / PI下的头文件。
我用cmake构建我的项目,并希望有一个跨平台的解决方案。 但是我很满意使用pkg-config命令。
有人知道什么是获取标志的“正确” /“推荐”方法, 还是至少不需要对路径进行硬编码的变体?
答案 0 :(得分:2)
Autotools的参与结束于在系统上安装构建工件的位置。 使用不会通过Autotools。 * 当安装的工件是库和标头时,它们与可执行文件一样适用。使用Autotools构建的程序或库没有什么特殊或不同之处。
我使用cmake构建项目,并希望有一个跨平台 解决方案。但是我很满意使用pkg-config 命令。
就像任何其他构建系统服务的项目一样,Autotools项目可以构建并安装pkg-config配置文件或CMake宏,或者他们认为合适的任何其他零散片段来帮助用户,但这是特定于项目的。 Autotools不会自行创建此类额外的片段,但是某些基于Autotools的项目会添加它们。还有一些则没有,就像某些CMake项目没有,某些带有手动构建系统的项目一样,等等。
有人知道什么是获取cflag的“正确” /“推荐”方法,或者至少是一种我不必对路径进行硬编码的变体?
请注意,通常,对于您知道名称的库,您可能需要的唯一标志是那些指定库头的位置和/或一个指定库本身的位置的标志。如果相关部分安装在默认情况下编译器所看的位置,那么即使这些都是不必要的。同样,这些通常不被视为CFLAGS,本身。术语略有不同,但前者是预处理器标志,而后者是链接标志。
由于使用的是CMake,因此可以考虑编写CMake代码以在可能的目录中搜索所需的库和标头,并将结果设置为合适的变量以供其他代码使用。不过,这更像是一种Autotools风格的方法。另外,您可以定义一个用户设置变量,通过该变量可以将所需位置指定给CMake。假设第三方项目尚未为此提供有用的东西。或者,在许可允许的情况下,您可以将第三方库与自己的库打包在一起,以便您控制其安装位置。
但是,在一般情况下,这只是人们在构建软件时必须面对的事情。通过提供有关项目依赖项以及如何告知构建系统其位置的良好文档,并为将信息提供给构建系统提供有用的规定,使他们的工作更轻松。
* 可以断言使用 libtool归档文件是一个例外,Autotools项目可以将其与常规库一起安装-如果要使用这些库,它们将直接或间接通过libtool
。但是实际上,这只会在另一个Autotools项目中发生。