小编Eld*_*mov的帖子

Python错误:"ValueError:需要多于1个值才能解压缩"

在Python中,当我运行此代码时:

from sys import argv

script, user_name =argv
prompt = '>'

print "Hi %s, I'm the %s script." % (user_name, script)
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

Traceback (most recent call last):  
script, user_name =argv  
ValueError: need more than 1 value to unpack
Run Code Online (Sandbox Code Playgroud)

这个错误意味着什么?

python arguments

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

我应该命名"makefile"还是"Makefile"?

虽然两个名字都可以完成这项工作,但是makefile的正确名称是什么?

GNU`make'主页使用Makefile,我想这是命名它的好方法.在大写字母中键入前M的任何原因?

coding-style makefile gnu-make

30
推荐指数
1
解决办法
6268
查看次数

具有多个规则的Makefile共享相同的配方

我想知道是否可以编写一个包含多个规则的Makefile,每个规则都定义了自己的先决条件,并在不重复配方的情况下执行所有相同的配方.例:

TARGETS= file1 file2 file3

all: $(TARGETS)

file1: dep1 dep2
file2: dep2 dep3 dep4
file3: dep2 dep1
    cat $^ > $@
Run Code Online (Sandbox Code Playgroud)

谢谢!

makefile rules

26
推荐指数
1
解决办法
1万
查看次数

GNU将转换空间转换为冒号

给定以冒号分隔的路径列表,使用GNU Make获取以空格分隔的列表非常简单:

CPATHS := /usr/bin/foo:/usr/bin/baz:/usr/bin/baz
SPATHS := $(subst :, ,$(CPATHS))
Run Code Online (Sandbox Code Playgroud)

但是,我找不到朝着相反方向前进的好方法.以下hack确实有效(至少在安装了sed的情况下)但是我很确定只有使用Make的内部函数才能有更好的解决方法.

SPATHS := /usr/bin/foo /usr/bin/baz /usr/bin/baz
CPATHS := $(shell echo $(SPATHS) > tmp; sed 's/ \+/:/g' tmp; rm tmp)
Run Code Online (Sandbox Code Playgroud)

makefile space path gnu-make colon

18
推荐指数
2
解决办法
4363
查看次数

为什么我们需要list_for_each_safe()来删除内核链表中的节点?

我正在学习如何使用list.h中的内核链表API .

我了解到我需要list_for_each_safe()在删除节点时使用list_del()而不是使用list_for_each().

代码list_for_each_safe():

#define list_for_each_safe(pos, n, head) \
    for (pos = (head)->next, n = pos->next; pos != (head); \
        pos = n, n = pos->next)
Run Code Online (Sandbox Code Playgroud)

代码list_for_each():

    for (pos = (head)->next; pos != (head); pos = pos->next)
Run Code Online (Sandbox Code Playgroud)

我注意到它们都非常相似,只是_safe版本需要额外的参数用作"临时存储"(在此声明为list.h).

我知道什么时候应用函数correcly,_safe版本删除,正常版本访问,但我很好奇额外的论点如何使它"安全"?

请考虑以下内容,我将删除链接列表中的每个节点list_for_each_safe():

struct kool_list{
    int to;
    struct list_head list;
    int from;
    };

struct kool_list *tmp;
struct list_head *pos, *q;
struct kool_list mylist; …
Run Code Online (Sandbox Code Playgroud)

c foreach kernel linked-list linux-kernel

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

在Eclipse中设置环境变量以与Android NDK一起使用

我在Windows上使用带有Eclipse的cygwin的Android NDK.在我的makefile中,我想在eclipse中使用环境变量设置prebuild库的路径.所以我做了以下事情:

在此输入图像描述

在makefile中:

LOCAL_SRC_FILES = $(QCAR_SDK_ROOT)build/lib/$(TARGET_ARCH_ABI)/libQCAR.so
LOCAL_EXPORT_C_INCLUDES := $(QCAR_SDK_ROOT)build/include
Run Code Online (Sandbox Code Playgroud)

但我得到错误:

Android NDK: ERROR:jni/Android.mk:QCAR-prebuilt: LOCAL_SRC_FILES points to a missing file    
/cygdrive/d/Development/Android/android-ndk-r7/build/core/prebuilt-library.mk:43: *** Android NDK: Aborting    .  Stop.
make: *** [all] Error 2
Android NDK: Check that jni//cygdrive/D/Development/Android/qcar-android-1-5-4-beta1/build/lib/armeabi/libQCAR.so exists  or that its path is correct   
Run Code Online (Sandbox Code Playgroud)

直接尝试在makefile中定义变量,得到了相同的结果.

显然,这条道路不是我想要的.如何设置正确的路径?

eclipse cygwin makefile environment-variables android-ndk

9
推荐指数
1
解决办法
1万
查看次数

在创建Python类时调用类方法

我想在类创建时自动运行一些可以调用其他类方法的代码.我没有在类声明本身中找到这样做的方法,并最终创建一个@classmethod被调用__clsinit__并在类声明后立即从定义范围调用它.是否有一个我可以定义的方法,以便在创建类对象后自动调用它?

python initializer class-method

8
推荐指数
1
解决办法
2784
查看次数

捕获由Makefile启动的后台进程的PID

我有一个启动Django Web服务器的Makefile.我希望服务器在后台启动,PID保存到文件中.

我的食谱看起来像这样:

run: venv
    @"${PYTHON}" "${APP}/manage.py" runserver 80
Run Code Online (Sandbox Code Playgroud)

直观地说,要构建进程并捕获PID,我必须做这样的事情:

run: venv
    @"${PYTHON}" "${APP}/manage.py" runserver 80 & ; echo "$$!" > "${LOGDIR}/django.pid"
Run Code Online (Sandbox Code Playgroud)

但这不起作用.使用时,'make'使用的子shell(在我的情况下是/ bin/sh)可以正常工作:

<command> &
Run Code Online (Sandbox Code Playgroud)

...后台进程,并在使用时工作:

<command> ; <command>
Run Code Online (Sandbox Code Playgroud)

(或<command> && <command>等等)链式命令.但是,当我尝试后台第一个进程并链接第二个进程时,我收到以下错误:

/bin/sh: -c: line 0: syntax error near unexpected token `;'

在Makefile中处理进程并捕获PID的最佳方法是什么?

谢谢
- B

shell makefile sh background-process

7
推荐指数
1
解决办法
4492
查看次数

如何使Eclipse使用不在项目根目录中的现有makefile

我正在尝试将Eclipse与现有的代码库一起使用.此代码将Makefile隐藏在项目源根目录下的几个目录中.如果我告诉eclipse这个埋藏的目录是项目的根目录,那么所有内容都会构建,但没有索引,因为Eclipse不知道源代码的来源.

如果我告诉Eclipse使用源的根,那么我就无法使Eclipse使用隐藏的makefile.

我已经阅读了Eclipse makefile问题的其他答案,但是我仍然遇到让Eclipse完美运行的问题 - 我还尝试了一个使用埋藏的Makefile但没有运气的自定义Builder schell脚本.

谢谢你的帮助!

c eclipse makefile eclipse-cdt

7
推荐指数
1
解决办法
7642
查看次数

GNU Make.为什么这种复杂的语法生成依赖?

我正在阅读使用GNU Make管理项目,并在第2.7章 - 自动依赖关系生成中找到了这个例子.作者从GNU手册中说出了他们:

%.d: %c
        $(CC) -M $(CPPFLAGS $< > $@.$$$$; \
              sed s',\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
              rm -f $@.$$$$
Run Code Online (Sandbox Code Playgroud)

但是,我能够用这个做同样的事情(注意sed):

-include $(subst .c,.d,$(SOURCES))

%.d: %.c
          @$(CC) -M $(CPPFLAGS) $<  | sed 's|:| $*.d : |'  > $@;
Run Code Online (Sandbox Code Playgroud)

所有这些行都是生成依赖项,然后添加*.d名称.他们不得不改变第一行:

  foo.o: bar.h foo.h fubar.h
Run Code Online (Sandbox Code Playgroud)

to foo.o foo.d:bar.h foo.h fubar.h

我更简单,似乎工作得很好,但我认为GNU伙伴有他们sed命令的理由.也:

  • 为什么要将文件重定向到sed?为什么不简单地将它作为commond line参数
  • 为什么不完全跳过中间文件?

我知道GNU的人也可以想到这些,但出于某种原因,选择了更复杂的设置.我只是想了解他们的推理,所以我可以动态地做这些.

makefile gnu-make

6
推荐指数
2
解决办法
3953
查看次数