gcc 4.4.2 cmake 2.6
Я только что начал использовать cmake. Прибытие из записи моих собственных Make-файлов.
Однако у меня есть эта структура каталогов и использование сборки из источника. Разделить исходные файлы от файлов типа "build".
project
src
my_c_files.c
CMakeLists.txt
build
Makefile
Прежде чем я записал бы свои собственные Make-файлы в src каталоге и затем нажал бы F5, и я смог скомпилировать свою программу. И emacs перечислил бы любое предупреждение или ошибки. Однако кажется, что я должен открыть терминал и перейти к каталогу сборки для выполнения
cmake ../src
и затем
make
Я хотел бы работать, делают из emacs то же как нажатие F5. Но поскольку Make-файл, как сгенерировано в каталоге сборки и emacs ищет его в src каталоге.
Даже когда я установил гибкую ссылку на Make-файл в src каталоге для соединения с Make-файлом в каталоге сборки. Все это сделало был, дают мне список ошибок.
Я нашел. Свойство «namePattern» должно быть определено для создания входных данных с другим именем.
За бывшее:
<input type="file" accept="gif|jpg|jpeg|png" />
<script language="javascript" type="text/javascript">
$(document).ready(function () {
$i = (1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20);
$(':file').MultiFile({ namePattern: '$name_$i', maxlength: 20 });
});
</script>
Тем не менее, спасибо за помощь.
-121--3842739- Вот еще один способ сделать это, используя ogrid
, который немного быстрее:
import numpy as np
import Image
w, h = 600, 800
sq = 15
color1 = (0xFF, 0x80, 0x00)
color2 = (0x80, 0xFF, 0x00)
def use_ogrid():
coords = np.ogrid[0:w, 0:h]
idx = (coords[0] // sq + coords[1] // sq) % 2
vals = np.array([color1, color2], dtype=np.uint8)
img = vals[idx]
return img
def use_fromfunction():
img = np.zeros((w, h, 3), dtype=np.uint8)
c = np.fromfunction(lambda x, y: ((x // sq) + (y // sq)) % 2, (w, h))
img[c == 0] = color1
img[c == 1] = color2
return img
if __name__ == '__main__':
for f in (use_ogrid, use_fromfunction):
img = f()
pilImage = Image.fromarray(img, 'RGB')
pilImage.save('{0}.png'.format(f.func_name))
Вот временные результаты:
% python -mtimeit -s"import test" "test.use_fromfunction()"
10 loops, best of 3: 307 msec per loop
% python -mtimeit -s"import test" "test.use_ogrid()"
10 loops, best of 3: 129 msec per loop
-121--2111426- Точно для той же цели я нашел .dir-locals.el
чрезвычайно полезным, вот как один из моих выглядит так:
((nil . ((tab-width . 8)
(indent-tabs-mode . t)))
(c++-mode . ((c-basic-offset . 8)
(tab-width . 8)
(indent-tabs-mode . t)
(compile-command . "make -C ../build -j 2 run_tests")))
((c-mode . ((c-basic-offset . 8)
(tab-width . 8)
(indent-tabs-mode . t)
(compile-command . "make -C ../build -j 2 run_tests")))))
Очевидно, что я могу иметь пути, указанные в различных .dir _ locals.el
в соответствии с их расположением и, например, некоторые сборки запустить _ тесты
для модульного теста, некоторые построить реальную цель и так далее.
Затем я поместил фиктивный makefile
в каталог сборки, который выглядит следующим образом:
all: run_tests
run_tests:
@cmake ..
@make -j 2
Этот путь я могу сделать извлечение и просто запустить M-x compile
в любом файле, который мне нравится, и он будет делать правильные вещи. Я использую git и имею, что Makefile игнорировал от мониторинга по git как так:
git update-index --ассуме-неизмененный Makefile
, и если я хочу изменить и зафиксировать его я делаю
git update-index --no-talk-instanged Makefile
.
Таким образом, только что созданный cmake Makefile не покажет в git статус
как измененный, и я не совершу его случайно.
Преимущества этого подхода:
так как cmake использует абсолютные пути внутри, нет абсолютно никаких проблем с переходом через ошибки компиляции в буфере компиляции, просто нажимая на них enter.
Вы можете указать любые правила отступа, которые вы хотите там, и они могут быть разными в различных проектах или даже каталогах, если вы хотите:)
Вы можете указать любое количество целевых объектов в различных проектах, даже каталогах, по-прежнему использовать одну и ту же старую компиляцию M-x
(я привязан к C-c b
) и заставить Emacs сделать правильную вещь
Единственным недостатком является наличие .dir-locals.el
в ваших подкаталогах, которые я вряд ли нахожу плохими.
EDIT: robUK, чтобы ответить на ваш комментарий:
Вот документация для локальных переменных по каталогу , как они называются в руководстве Emacs. Это не пакет, это часть Emacs, хотя я не уверен, был ли он доступен в предыдущих 23 версиях, я использую 23.1.1.
EDIT2: liwp, чтобы ответить на ваш вопрос:
Как уже указал Чарльз, и как говорится в документации:
Если вы положите файл со специальным именем .dir-locals.el в каталоге, Emacs прочитает его при посещении любого файла в этом каталоге или любом из его подкаталогов и применить настройки указывает на буфер файла. Emacs выполняет поиск .dir-locals.el начиная с каталога посещенный файл и перемещение вверх дерево каталогов. (Во избежание замедления, этот поиск пропущен для удаленного файлы.)
Вам не нужно .dir-locals.el
везде в дереве проекта. Примечание,однако это, вероятно, зависит от сложности базовой структуры кода.
Обычно я бы пошел на довольно простую компоновку так:
/project_root_dir
/build
/src
/test
и у меня были бы немного другие цели, указанные в разных .dir-locals.el
, скажем в /test
Я бы только построил testrunner
и выполнил бы его, я бы потратил большую часть времени на разработку, построив эту цель. Тогда в /src
я бы сначала построил тот же самый testrunner
, исполнил бы его, и если бы там все прошло хорошо, это построило бы мне мою главную цель проекта. Если вам это не нужно, вы можете быть в порядке только с одним .dir-locals.el
в разделе /project _ root _ dir
. Если исходная структура и требования гораздо более сложны, это может означать, что вам потребуется несколько больше мастера, связанного с путями и целями.
Вы можете изменить текущий рабочий каталог, который EMACS использует с M-X CD
. После этого, когда вы запустите компиляцию M-X
, make
будут выполняться в новом рабочем каталоге. Это эффективно так же, как работает
на терминал в каталоге сборки, поэтому он должен работать для вас просто в порядке.
На самом деле, вы можете использовать метод .live. У вас нет свойства event.touches из-за внутренней обработки событий jQuery. Чтобы «исправить» события, jQuery клонирует событие. При этом копируется только ограниченное количество свойств по причинам производительности. Однако получить доступ к исходному объекту события можно с помощью свойства event.origingEvent.
Итак, ваш пример кода должен выглядеть следующим образом:
$('a').live('touchend', function(event) {
event.preventDefault();
console.log(event.originalEvent.touches.length);
});
Вот свойства, которые копируются поверх: http://github.com/jquery/jquery/blob/master/src/event.js#L411
-121--4155991-Извините, что я размещаю этот ответ как отдельный ответ, потому что он не поместится в качестве комментария.:)
Поэтому взаимодействие с виджетами очень ограничено.
Дело в том, что виджеты не являются «мини-приложениями», они... виджеты. Они живут в мире и зависят от реального применения, содержащего их.
Существует постоянный спрос на виджеты для поддержки все более и более сложных взаимодействий, но каждый раз, когда мы начинаем по этому пути, это в конечном итоге делает взаимодействие с содержащим приложение гораздо сложнее, а также, кажется, негативно влияет на общую удобство использования.
Например, если виджеты могут обрабатывать свайпы, то пользователь теперь очень не уверен в том, как они могут проводить пальцы между экранами, потому что они получат различное поведение в зависимости от того, где они проводят. Они могут даже застрять в состоянии, когда практически невозможно провести пальцем между экранами из-за виджетов, покрывающих сенсорную область.
Поэтому я рекомендую рассматривать виджеты как окно в ключевой информации, связанной с вашим приложением, чтобы перейти к более подробной информации об этой информации, нажав на виджет и переключившись на приложение, и, возможно, некоторые дополнительные кнопки для выполнения ключевых операций.
Также начиная с 2.0, с новыми темами обоев, вы можете сделать пользовательский интерфейс действия, что пользователь посещает из вашего виджета сидеть поверх тех же обоев, что и дома. Это делает переключение между ним и домом гораздо более похожим на взаимодействие внутри дома, а не с другим приложением.
-121--3565938-Более общее решение для команды compile:
cd ${PWD%/src/*}/build && cmake ../src && make
Переменная среды PWD содержит каталог, в котором находится редактируемый файл; расширение с помощью %/src/*
возвращает вас к корню проекта, не беспокоясь о том, сколько ../
вам нужно.
Я использую EDE из Cedet для настройки проектов для работы с CMake. Взгляните в мою CEDET-конфигурацию, начиная со строки 105, например, код для настройки проекта. Я использую отдельные каталоги Debug & Release для разных сборок, и по умолчанию компиляция выполняется только для Debug mode.....
Измените команду на использование абсолютного, а не относительного патча. EG:
cmake ~/workspace/project/src && make