Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C linux构建makefiles/deployment-development的方式?_C_Linux - Fatal编程技术网

C linux构建makefiles/deployment-development的方式?

C linux构建makefiles/deployment-development的方式?,c,linux,C,Linux,我有一个问题:许多存储库不包含包含调试符号的库。这意味着我必须自己安装它们,通常它们安装到不同的目录中,而不是我从发行版获得的库中。 显然(?)我想用精简的、优化的库来运行我的实际应用程序,但是现在我的makefile已经编写好了,因此它们可以与自定义编译库(包括dbg符号)一起使用…示例: -I/usr/local/include/which现在是正确的路径,但是在部署时我想我需要-I/usr/include/which 这只是一个简单的例子,但它显示了在我的开发机器和部署机器上的一切是多么的

我有一个问题:许多存储库不包含包含调试符号的库。这意味着我必须自己安装它们,通常它们安装到不同的目录中,而不是我从发行版获得的库中。 显然(?)我想用精简的、优化的库来运行我的实际应用程序,但是现在我的makefile已经编写好了,因此它们可以与自定义编译库(包括dbg符号)一起使用…示例:

-I/usr/local/include/which现在是正确的路径,但是在部署时我想我需要-I/usr/include/which

这只是一个简单的例子,但它显示了在我的开发机器和部署机器上的一切是多么的不同。肯定有人想出了一些解决办法来对付这个问题?你能帮忙吗?(除了像将if写入makefile这样明显的事情之外,这很难看而且容易出错)


我只是不明白怎么会有人能这样工作。唯一的解决方案是总是自己编译所有内容。

如果您的客户进行编译。。您需要pkg配置

如果您的客户只执行。。
您有一个启动程序shell脚本,它可以正确设置LD_LIBRARY_路径并执行二进制文件。

如果您的客户进行编译。。您需要pkg配置

如果您的客户只执行。。
您有一个launcher shell脚本,它可以正确设置LD_LIBRARY_路径并执行二进制文件。

调试或发布生成通常不是在Makefile中决定的,而是由配置脚本决定的。也就是说,您有一个源代码树和来自它的两个构建,一个使用库的调试标志(-O0,-ggdb)构建调试构建(通过-I,-L,可能设置rpath),另一个构建是使用生产标志和正常环境的生产构建

典型的设置如下所示:

svn co my_source_url source
mkdir debug production
( cd debug && ../source/configure DEBUG_OPTIONS; )
( cd production && ../source/configure PRODUCTION_OPTIONS; )

调试或发布版本通常不是在Makefile中决定的,而是由配置脚本决定的。也就是说,您有一个源代码树和来自它的两个构建,一个使用库的调试标志(-O0,-ggdb)构建调试构建(通过-I,-L,可能设置rpath),另一个构建是使用生产标志和正常环境的生产构建

典型的设置如下所示:

svn co my_source_url source
mkdir debug production
( cd debug && ../source/configure DEBUG_OPTIONS; )
( cd production && ../source/configure PRODUCTION_OPTIONS; )

rpath并不是从开发到部署的唯一变化,因此一个简单的启动器不会有任何好处。(请参见我的关于更改的包含路径的示例)。另外,LD_LIBRARY_PATH被认为是不好的形式。rpath不是从开发到部署的唯一变化,因此一个简单的启动器不会有任何好处。(请参见我的关于更改的包含路径的示例)。另外,LD_LIBRARY_PATH被认为是糟糕的形式。谢谢,现在那些配置脚本有了意义。但是我真的不喜欢写bash脚本,它太容易出错。我想我现在知道了为什么人们会使用cmake、scons等等:)。除了让makefile变得糟糕之外,我从来没有真正了解它的意义less@Blub:不要手动编写配置脚本,让autoconf为您完成这项工作。而且它的便携性很强,cmake和scons无法做到这一点。您可以在不使用automake.thiton的情况下使用autoconf,谢谢您的建议。现在我有一个问题。如果您使用make,那么GNU构建系统似乎是一个不错的选择。然而,我不确定它将如何与我目前学习喜爱的构建系统(不是Make,而是Make)配合使用。看起来GNU Buildsystem需要在我的工具链中使用Make。@Blub:autoconf仅取决于两个假设:“Make”实现在其语法中不使用@字符(tup不使用),并且它理解“${FOO}”变量替换(不知道tup是如何做到的)。thiton,tup有以下语法:$(CC)谢谢,现在,这些配置脚本有了意义。但是我真的不喜欢写bash脚本,它太容易出错。我想我现在知道了为什么人们会使用cmake、scons等等:)。除了让makefile变得糟糕之外,我从来没有真正了解它的意义less@Blub:不要手动编写配置脚本,让autoconf为您完成这项工作。而且它的便携性很强,cmake和scons无法做到这一点。您可以在不使用automake.thiton的情况下使用autoconf,谢谢您的建议。现在我有一个问题。如果您使用make,那么GNU构建系统似乎是一个不错的选择。然而,我不确定它将如何与我目前学习喜爱的构建系统(不是Make,而是Make)配合使用。看起来GNU Buildsystem需要在我的工具链中使用Make。@Blub:autoconf仅取决于两个假设:“Make”实现在其语法中不使用@字符(tup不使用),并且它理解“${FOO}”变量替换(不知道tup是如何做到的)。thiton,tup有以下语法:$(CC)