【发布时间】:2014-07-30 16:56:07
【问题描述】:
我需要一个可以这样抽象描述的构建机制:
- 编译代码并将其与库的系统版本链接,或者
- 编译代码并将其与同一库的本地版本链接
换句话说:
我在我的程序中使用了一个库,我需要测试该库的多个版本。我需要测试安装在系统目录中的系统版本,还需要测试我自己下载、构建和安装在本地目录中的同一库的旧版本或新版本。
我当前的方法:根据用户命令,我要么将 -I 和 -L 留空,要么将它们设置为指向所选版本库的本地目录。
当我使用系统版本时,它工作正常,因为编译器的默认 -I 和 -L 搜索路径指向库的系统版本。
但是当我选择本地版本时,根据编译/链接顺序(至少很难弄清楚),构建可能会针对系统或本地库进行,具体取决于编译器首先找到哪个。
另外,当我运行程序时,如果我想测试本地库版本,我需要将 LD_LIBRARY_PATH 设置为本地库目录。
是否有一种干净的方式来构建然后使用库的系统或本地版本运行?
为了避免这种非确定性行为,我可以直接链接 .a 文件(避免 -L 搜索路径),但我仍然会遇到包含路径的问题,因为编译可以使用系统版本标头或一个本地人默默地。
如果有帮助,我正在使用带有 g++ 的 scons。
还有其他方法吗?
基本上我需要做的:
scons
./a.out
(使用库的系统版本运行)
scons library=1.0
./a.out
(与库的 1.0 版一起运行)
scons library=3.0
./a.out
(与库的 3.0 版一起运行)
【问题讨论】:
标签: build linker g++ libraries include-path