标签: gnu

Gnu Makefile - 处理依赖项

Unix平台上的C++程序员使用什么方法来创建和管理Makefile?

我在我的项目中使用手工制作的Makefile,但它们不处理头文件更改和其他依赖项.我google了一下,在这里找到了一个很好的解决方案.

但是我在sed命令中遇到了一个问题 -

    sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \
        -e '/^$$/ d' -e 's/$$/ :/' < $*.d >> $*.P; \
Run Code Online (Sandbox Code Playgroud)

问题在于第3个表达式"-e's/*\$$ //".它不起作用.它应该删除尾随反斜杠.我知道那里必须有双倍的美元,因为这是一个Makefile.有人能告诉我这里有什么问题吗?

这是完整的Makefile -

CC=g++
CFLAGS=-g -Wall
LIBS=-lpthread

OBJS=file1.o file2.o
TARGET=testProg

$(TARGET) : $(OBJS)
        $(CC) -o $@ $^ $(CFLAGS) $(LIBS)

%.o : %.cpp
        $(CC) -MMD -c -o $@ $< $(CFLAGS)
        @cp $*.d $*.P; \
            sed -e 's/#.*//' -e 's/^[^:]*: *//' -e 's/ *\\$$//' \
                -e '/^$$/ d' -e 's/$$/ :/' < $*.d >> …
Run Code Online (Sandbox Code Playgroud)

c++ unix gnu makefile sed

12
推荐指数
2
解决办法
2万
查看次数

主要()应该有多大?

我在假期周末学习了一点C,我开始研究用C编写的其他程序.我最后看了GNU Netcat,认为这将是一个很好的例子.

看到600线main()功能让我有点震惊.这是正常的吗?如果这是正常的,这被认为是良好的C编码实践吗?

c gnu

12
推荐指数
2
解决办法
1444
查看次数

获得符合c ++ 11的编译器

这一切似乎都是一个巨大的混乱.
我想要的只是一个实现C++ 11的编译器,所以我可以使用<chrono>.但是我从一开始就很困惑.

目前,我通过调用G ++来构建程序,但是当我检查版本时$ g++ -v,我得到:

gcc版本4.2.1(基于Apple Inc. build 5658)(LLVM build 2336.11.00)


这是怎么回事?我使用的是G ++吗?GCC?LLVM?我甚至不知道.它们是一样的吗?


所以现在我正在尝试通过gnu.org构建和下载GCC 4.7 ,但我不知道任何指南正在谈论什么.对于我不知道的事情,我从未见过这么多的首字母缩略词.

为什么这么复杂?什么是所有这些版本,其中一些只实现C++ 11的某些部分而不是其他部分?

c++ macos gnu toolchain c++11

12
推荐指数
1
解决办法
9387
查看次数

GNU make通配符函数找不到运行时生成的文件

简介:
我在类似unix的系统上使用GNU Make(3.81)而且我遇到了一个问题,即$(wildcard, pattern)函数无法找到由(可能/显然?)先前执行的配方生成的文件,而其他程序(例如ls)能够验证其存在.我想知道为什么通配符函数没有返回任何东西,当它被扩展(到空字符串),以及我如何获得它来查找生成的文件.

测试用例:
以下测试用例说明了问题.
Makefile内容:

.PHONY: build clean

test:
    @echo "Creating test file 'test'."
    @echo "this is a test file" > test

build: test
    @echo "Directory contents:"
    @ls
    @echo "Test file contents:"
    @cat test
    @echo "Wildcard output:"
    @echo $(wildcard test)

clean:
    @rm -f test
Run Code Online (Sandbox Code Playgroud)

运行makefile两次(然后清理)显示只有在第二次运行时它才会检测到创建的文件.
输出:

Creating test file 'test'.
Directory contents:
makefile  test
Test file contents:
this is a test file
Wildcard output:

Directory contents:
makefile  test
Test file contents:
this is a test file
Wildcard …
Run Code Online (Sandbox Code Playgroud)

gnu makefile function wildcard is-empty

12
推荐指数
1
解决办法
1947
查看次数

如何配置'less'来显示格式化的markdown文件?

我想有一些格式的less显示*.md降价文件 - 比如我知道less可以,对于联机帮助页等.我正在运行Ubuntu 12.04.

我将用户定义的过滤器放入.lessfilter:

#!/bin/sh
case "$1" in
  *.md)
    fn=/tmp/$1.$$.html
    markdown "$1" | html2txt > $fn  ### LOSES FORMATTING
    cat $fn                         ### TO STDOUT???
    ;;
  *)
  # We don't handle this format
  exit 1
esac
# No further processing by lesspipe necessary
exit 0
Run Code Online (Sandbox Code Playgroud)

所以,主要问题是:

  • 我怎样才能传递一些基本的格式信息less,而不是丢失它html2txt
  • 将新内容打印到stdout是否正确?或者我可以只写入*.html文件磁盘并让它less在自己的题外话处理(看到html扩展并对其进行操作?)

linux shell markdown text-processing gnu

12
推荐指数
3
解决办法
4532
查看次数

android ndk开发中gnustl和stlport有什么区别?

我想知道他们的表现/稳定性是否彼此不同,他们的许可证简短解释.真实世界的经历受到欢迎.

android stl gnu android-ndk

12
推荐指数
1
解决办法
6642
查看次数

Bash数组和负数下标,是或否?

GNU bash的手册告诉我

如果使用语法分配任何变量,则会自动创建索引数组

name[subscript]=value
Run Code Online (Sandbox Code Playgroud)

下标被视为必须求值为数字的算术表达式.如果下标求值为小于零的数字,则将其用作大于数组最大索引的偏移量的偏移量(因此-1的子标记指向数组的最后一个元素).

所以我想我会尝试一下,得到以下结果:

$ muh=(1 4 'a' 'bleh' 2)
$ echo $muh
1
$ echo ${muh[*]}
1 4 a bleh 2    # so far so good so now I'll try a negative ...
$ echo ${muh[-1]}
-bash: muh: bad array subscript  # didn't go as planned!
Run Code Online (Sandbox Code Playgroud)

我做错了什么,或者网站是错误的,还是gnu bash与我在CentOS下运行的bash有什么不同?谢谢!

unix linux arrays bash gnu

12
推荐指数
3
解决办法
4478
查看次数

Grep的"无效范围结束" - 错误或功能?

我有这三个文件:

$ cat pattern-ok 
['\-]
$ cat pattern-buggy 
[\-']
$ cat text 
abc'def-ghi
Run Code Online (Sandbox Code Playgroud)

现在,以下是我不知道的错误或正则表达式功能?

$ cat text | grep -f pattern-ok 
abc'def-ghi
$ cat text | grep -f pattern-buggy
grep: Invalid range end
Run Code Online (Sandbox Code Playgroud)

我正在使用:

$ grep --version | head -n 1
grep (GNU grep) 2.20
Run Code Online (Sandbox Code Playgroud)

regex grep gnu

12
推荐指数
2
解决办法
3万
查看次数

weak_alias函数做了什么以及它定义在何处

所以我正在查看gcc编译器的来源,我在fork.c中看到了这个:

int
__fork ()
{
  __set_errno (ENOSYS);
  return -1;
}
libc_hidden_def (__fork)
stub_warning (fork)

weak_alias (__fork, fork)
#include <stub-tag.h>
Run Code Online (Sandbox Code Playgroud)

我想弄清楚weak_alias的作用.我在glibc源文件中使用了grep命令来查找所有出现的#define weak_alias:

grep -r "#define weak_alias"
Run Code Online (Sandbox Code Playgroud)

我发现很多次出现的宏:

#define weak_alias(n, a)
Run Code Online (Sandbox Code Playgroud)

但宏并没有真正解释任何事情.他们只是定义了这个陈述,但没有说明它是如何被替换的.例如,一个出现在profil.c中:

/* Turn off the attempt to generate ld aliasing records. */
#undef weak_alias
#define weak_alias(a,b)
Run Code Online (Sandbox Code Playgroud)

那么有什么想法,weak_alias做什么以及它在哪里定义?

提前致谢

c linux compiler-construction gcc gnu

11
推荐指数
2
解决办法
6881
查看次数

是否有一个字段可以存储在正则表达式中使用的确切字段分隔符 FS,相当于 RS 的 RT?

GNU Awk 的 4.1.2 Record Splitting with 中,gawk我们可以阅读:

RS是单个字符时,RT包含相同的单个字符。但是,whenRS是正则表达式,RT包含与正则表达式匹配的实际输入文本。

这个变量RT某些情况下非常有用。

同样,我们可以设置一个正则表达式作为字段分隔符。例如,在这里我们允许它是“;” 或“|”:

$ gawk -F';' '{print NF}' <<< "hello;how|are you"
2  # there are 2 fields, since ";" appears once
$ gawk -F'[;|]' '{print NF}' <<< "hello;how|are you"
3  # there are 3 fields, since ";" appears once and "|" also once
Run Code Online (Sandbox Code Playgroud)

但是,如果我们想再次打包数据,我们没有办法知道两个字段之间出现了哪个分隔符。因此,如果在前面的示例中我想遍历字段并使用 再次将它们打印在一起FS,它会在每种情况下打印整个表达式:

$ gawk -F'[;|]' '{for (i=1;i<=NF;i++) printf ("%s%s", $i, FS)}' …
Run Code Online (Sandbox Code Playgroud)

awk gnu

11
推荐指数
2
解决办法
176
查看次数