我的问题看似简单,但我已经失去了几个小时的学习试图找到解决方案.我正在尝试创建一个Makefile,为目录中的每个.c文件构建可执行文件.
我尝试过以下方法:
CC = gcc
SRCS = $(wildcard *.c)
OBJS = $(patsubst %.c,%.o,$(SRCS))
all: $(OBJS)
$(CC) $< -o $@
%.o: %.c
$(CC) $(CPFLAGS) -c $<
Run Code Online (Sandbox Code Playgroud)
但这样它只创建.o文件,而不是任何可执行文件.我需要一个规则,为每个.o文件生成一个可执行文件.类似于以下内容:
gcc src.o -o src
Run Code Online (Sandbox Code Playgroud) 我试图弄清楚如何提示输入密码,并将用户输入回显为星号(********)
最近,我开始创建一个可以连接到使用Python中的套接字模块的远程服务器的项目.它还没有完成,因为我正在使控制台用于连接服务器.
我正在尝试创建一个登录窗口,提示用户输入用户名和密码,但输入密码时我正在寻找要打印的星号,就像常见的密码输入一样(即 - Sekr3t被回复为:******).
经过几天的研究,我差不多完成了仍然有一个最后的错误,让我疯了(我完全无法解决它).注意 - 我知道有一个getpass模块可以用来替换它,更容易,但没有回声不是我正在寻找的.
这是我到目前为止的密码登录代码,我无法弄清楚为什么它不会回响星号:
import msvcrt
import sys
def login(prompt = '> '):
write = sys.stdout.write
for x in prompt:
msvcrt.putch(x)
passw = ""
while 1:
x = msvcrt.getch()
if x == '\r' or x == '\n':
break
if x == '\b':
# position of my error
passw = passw[:-1]
else:
write('*')
passw = passw + x
msvcrt.putch('\r')
msvcrt.putch('\n')
return passw
Run Code Online (Sandbox Code Playgroud)
>
如果您通过代码阅读和/或通过IDLE之类的内容运行它,您可能会注意到当用户后退空间时,存储的数据被一个字符擦除,但打印的星号不是.ie - Sekr3t + backspace = Sekr3,但是******留下了回音.任何关于如何在输入退格时擦除最后一个星号的帮助将不胜感激.另请注意,很多此代码来自getpass模块.我知道这不是一个很好的解释,可能不是那么好的代码,但我还在学习 - 请耐心等待.
简而言之,我需要在Makefile中知道是否从ViM调用了make.是否存在某个变量(例如环境或其他),ViM将设置为特定值?
我需要这个的原因如下:
如果从bash调用,我可以为用户(或我自己)做各种精彩的事情,例如给出关于正在构建哪个子系统的消息并突出显示错误和警告.
然而问题是,当从ViM调用时,错误消息已经被捕获并且引入\x1b命令(用于颜色)使得消息对ViM来说是不可理解的.我想要做的是:make在ViM中发布时基本上禁用着色.
虽然我宁愿让Makefile解决它,但我对其他解决方案持开放态度.
作为一个人,有很多方法可以看到存储库是否存在需要解决的冲突.
但是,我正在寻找一种方法来在脚本中检查这一点.也就是说,检查存储库是否处于良好状态以开始对其执行某些操作,或者它处于用户必须修复冲突的阶段.
我可以想到以下方式:
__git_ps1 "%s" | grep MERGING > /dev/null 2>&1 && echo "In merge state"
Run Code Online (Sandbox Code Playgroud)
但是,我怀疑这不是推荐的方法.首先是因为作为C程序员__git_ps1开始__并且作为C程序员我倾向于认为它不适合我的使用,其次我猜测有更合适的方式:
git repo-status --is-merging
Run Code Online (Sandbox Code Playgroud)
哪个会有返回值,或类似的东西.
那么,如果存储库处于合并状态,我如何询问git(作为脚本)?
这是C代码:
struct node{
void *value;
struct node *next;
};
void g(void *p){
/*...*/
}
void f(struct node *head, const int ok){
struct node *p=head;
while (p){
/* ...
code 1
...
*/
if (ok!=0){
g(p->value);
}
p=p->next;
}
}
Run Code Online (Sandbox Code Playgroud)
我用gcc来编译这段代码.如果我编译-O,它会优化这样的功能f:
void f(struct node *head, const int ok){
struct node *p=head;
if (ok!=0){
while (p){
/* ...
code 1
...
*/
g(p->value);
p=p->next;
}
}
else{
while (p){
/* ...
code 1
...
*/
p=p->next;
}
} …Run Code Online (Sandbox Code Playgroud) 在树中构建内核驱动程序时,我在drivers目录中运行make,这里KERNELDIR是内核源代码的路径,或者是头文件.
make -C $(KERNELDIR) M=$(PWD) modules
Run Code Online (Sandbox Code Playgroud)
在尝试使用以下方法构建标头时:
make headers_install ARCH=i386 INSTALL_HDR_PATH=$(HEADERSDIR)
Run Code Online (Sandbox Code Playgroud)
我觉得不适合出口建立一个反模块(不完整的内核源代码树)的几个文件和文件夹似乎丢失,就像一个Makefile文件,脚本,include/generated/autoconf.h或include/config/auto.conf等
Debian以一种可用的方式处理事务,如rules.real中所描述的那样,尽管它的描述不仅仅是描述的Documentation/make/headers_install.txt,似乎不是"标准"方式.
简而言之:我如何正确导出linux头文件,以便我可以针对它构建外部模块?
我正在尝试为树木编写一个分而治之的算法.对于除法步骤,我需要一种算法,通过移除节点将给定的无向图G =(V,E)与n个节点和m个边分割成子树.所有子图应具有不包含超过n/2个节点的属性(树应尽可能分割).首先,我尝试以递归方式从树中删除所有叶子以找到最后剩余的节点,然后我尝试在G中找到最长的路径并删除它的中间节点.下面给出的图表显示两种方法都不起作用:

是否有一些工作算法可以满足我的需要(在上述情况下返回节点H).
据说箭头运算符是递归应用的.但是,当我尝试执行以下代码时,它会在打印4时打印出乱码.
class dummy
{
public:
int *p;
int operator->()
{
return 4;
}
};
class screen
{
public:
dummy *p;
screen(dummy *pp): p(pp){}
dummy* operator->()
{
return p;
}
};
int main()
{
dummy *d = new dummy;
screen s(d);
cout<<s->p;
delete d;
}
Run Code Online (Sandbox Code Playgroud) 我有一个填充了文件名和路径的bash变量:
SONG="~/Music/Mine/Cool Title Bro.flac"
Run Code Online (Sandbox Code Playgroud)
在我尝试使标记变得更加容易的过程中,我对变量应用了一些转换以隔离标题:
echo "${SONG#\~/Music/Mine/}" # which prints: Cool Title Bro.flac
Run Code Online (Sandbox Code Playgroud)
我知道也可以删除后缀${SONG%%.flac}.
但是,是否可以在单个操作中删除前缀和后缀?
这个:
${SONG#\~/Music/Mine/%%.flac}
Run Code Online (Sandbox Code Playgroud)
大概是因为它试图将文字%%.flac作为前缀的一部分进行匹配.反过来不起作用(%%.flac#~/[...]),我甚至疯了似试
${${SONG#~/Music/Mine/}%%.flac}
Run Code Online (Sandbox Code Playgroud)
这也行不通.
这可能是我工程过度工程的一个主要例子,但是如果有办法做到这一点并且我还没有弄清楚它会很好.
当我打开2个水平分割文件时,每个窗口都有自己的状态行.
例如用命令
vim -o a.txt b.txt
Run Code Online (Sandbox Code Playgroud)
我将获得第一个窗口的状态行为"a.txt",第二个窗口为"b.txt".
我需要从命令行调用vim,我需要设置一个自定义状态行,并且我希望每个窗口都有不同的状态行.
同
vim -o -c "set statusline=hello" a.txt b.txt
Run Code Online (Sandbox Code Playgroud)
我得到"你好"作为两个窗口的状态.
如何将"hello"作为第一个窗口的状态行,将"world"作为第二个窗口,我该怎么做; 从命令行调用vim时?
此命令不起作用:
vim -o -c "set statusline=hello" a.txt -c "set statusline=world" b.txt
Run Code Online (Sandbox Code Playgroud)
请帮忙.