这两个文件主要出现在开源项目中.
它们是什么,它们是如何工作的?
我正在开发一个C++库.最后,我想公开提供多个平台(至少Linux和Windows),以及一些示例和Python绑定.工作进展顺利,但目前该项目非常混乱,仅针对Visual C++构建,而不是多平台构建.
因此,我觉得清理是有序的.我想改进的第一件事是项目的目录结构.我想创建一个适合Automake工具的结构,以便在多个平台上轻松编译,但我以前从未使用过这些.由于我仍然会在Visual Studio中进行(大部分)编码,因此我需要在某处保留我的Visual Studio项目和解决方案文件.
我试图像谷歌"C++库目录结构"这样的术语,但似乎没有任何用处.我找到了一些非常基本的指导方针,但没有明确的解决方案
在查看一些开源库时,我想出了以下内容:
\mylib
\mylib <source files, read somewhere to avoid 'src' directory>
\include? or just mix .cpp and .h
\bin <compiled examples, where to put the sources?>
\python <Python bindings stuff>
\lib <compiled library>
\projects <VC++ project files, .sln goes in project root?>
\include?
README
AUTHORS
...
Run Code Online (Sandbox Code Playgroud)
我以前没有/很少有多平台开发/开源项目的经验,我很惊讶我找不到关于如何构建这样一个项目的任何好的指导.
人们应该如何构建这样的图书馆项目?建议阅读什么?有一些很好的例子吗?
我试图在github上运行一个c ++程序.(可从以下链接获得https://github.com/mortehu/text-classifier)
我有一台Mac,我正试图在终端上运行它.我想我已经下载了autoconf和automake,但我不确定.要运行该程序,我将转到终端中正确的文件夹,然后运行
./configure && make
Run Code Online (Sandbox Code Playgroud)
但我得到错误:
警告:系统中缺少"aclocal-1.15".如果您修改'configure.ac'或'configure.ac'或'configure.ac'包含的m4文件,您应该只需要它.'aclocal'程序是GNU Automake软件包的一部分:http: //www.gnu.org/software/automake 它还需要GNU Autoconf,GNU m4和Perl才能运行:http : //www.gnu.org/software/autoconf http://www.gnu.org/software/m4/ http://www.perl.org/ make:***[aclocal.m4]错误127
我有xcode和g ++以及运行c程序所需的所有东西,但很明显,我不知道我在做什么.
在上面的链接中运行程序最简单,最简单的方法是什么?我意识到它带有自述文件和示例用法,但我无法让它工作.
我一直在寻找这个:我目前正在将一个中型程序转换为autotools,来自基于Eclipse的方法(带有makefile)
我总是习惯于进行"调试"构建,包含所有调试符号和没有优化,以及"发布"构建,没有调试符号和最佳优化.
现在我试图用autotools以某种方式复制它,所以我可以(也许)做类似的事情:
./configure
make debug
Run Code Online (Sandbox Code Playgroud)
哪个会有所有调试符号而没有优化,以及哪里:
./configure
make
Run Code Online (Sandbox Code Playgroud)
会导致"发布"版本(默认)
PS:我已经阅读了关于--enable-debug标志/功能的内容,但在我目前的(简单)设置中,使用它无法识别 configure
我想用autoconf/automake编译我的项目.我的configure.ac中定义了2个条件
AM_CONDITIONAL(HAVE_CLIENT, test $enable-client -eq 1)
AM_CONDITIONAL(HAVE_SERVER, test $enable-server -eq 1)
Run Code Online (Sandbox Code Playgroud)
我想在Makefile.am中将_LIBS与这两个条件分开
if HAVE_CLIENT
libtest_LIBS = \
$(top_builddir)/libclient.la
else if HAVE_SERVER
libtest_LIBS = \
$(top_builddir)/libserver.la
else
libtest_LIBS =
endif
Run Code Online (Sandbox Code Playgroud)
但else if HAVE_SERVER不起作用.
如何在makefile.am中写'else if'?
我使用的是64位系统但需要一组32位二进制文件.我必须将哪些选项传递给configure脚本才能生成32位/ x86 makefile?
我正在尝试构建的项目具有默认标志
CFLAGS = -Wall -g -O2
CXXFLAGS = -g -O2
Run Code Online (Sandbox Code Playgroud)
我需要在-w这两个变量上附加一个标志(删除:'将所有警告视为错误')
我有办法解决,给
make 'CFLAGS=-Wall -g -O2 -w'; 'CXXFLAGS=-g -O2 -w'
Run Code Online (Sandbox Code Playgroud)
要么
运行./configure并静态修改Makefile
但我想追加我的选择与现有的选项运行时configure或make
帖子 将一个CFLAG(例如-std = gnu99)添加到autotools项目中的 位置可以方便地使用宏来实现此目的.
是否可以通过运行链接到使用--coverage选项构建的共享库的可执行文件来生成gcov数据文件(.gcda文件)?
基本上,我有一个主库,它由多个编译成一个共享库的c ++文件组成,然后是一个名为"test"的子目录,其中包含一个链接到并测试主库的测试程序.一切都编译好,并为库源文件和测试源文件生成.gcno文件..gcda文件只为测试源文件生成,但我真的需要它们用于编译到共享库中的实际源文件.
有任何想法吗?
附加信息:
- 这是所有C++代码
- 一切都是使用由automake生成的make脚本构建的
- 在共享库中
为lib_la_CPPFLAGS和lib_la_LDFLAGS指定了--coverage选项Makefile.am - 为AM_CPPFLAGS和AM_LDFLAGS指定了--coverage选项在测试可执行文件Makefile.am中
- 测试源文件使用Google Test(C++单元测试框架)
编辑:固定间距问题
我已经看到了我配置的不同的东西.我有什么区别?仅使用一个是值得注意的吗?或者使用哪一个无关紧要?
我搜索了这个问题的答案,但找不到任何好处.也许他们已经老了,事情发生了变化,所以我再问一次.
我有一个目录结构:
我的项目
SRC
箱子
我想要的是,当我在根目录中制作时,二进制文件放在./bin中,而不是混乱./src.但是怎么样?
编辑:我正在使用C++.我的Makefile.am没什么特别的.只是bin_PROGRAM和_SOURCES变量.
当我运行make时,生成的二进制文件被放入./src.我只想把它们放在./bin中.