Как стать автором
Обновить
8
0

Пользователь

Отправить сообщение
и попадает на ретро после прочтения статьи ;)
Скрытый текст
Там двигать надо строки, чтобы линии соединялись ;-) Там просто дополнительная подсказка.
ваш совет помог

но правильный ответ это жесть :D
как я только не пробовал собрать png картинку
попробуйте cmake (и find_package в нём)
он неплохо работает в windows и с разными версиями Visual Studio
после некоторого периода превыкания — отличный инструмент
можно сделать любое количество конфигов для разных комбинаций флагов и кучу всяких удобных штук
Ваш пример 1 исправляется очень просто:

lib_config.cmake
add_definitions(-DMYFLAG=1)

lib/CMakeLists.txt
project(lib)
include(lib_config)
add_library(lib lib.h lib.cpp)

exe/CMakeLists.txt
project(exe)
include(lib_config)
add_executable(exe exe.cpp)
target_link_libraries(exe lib)

и никакой генерации конфигов
более трудоемкий способ через find_package и руками сделанный Find*package name*.cmake
в cmake есть не только add_definitions

SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES COMPILE_FLAGS -DHELLO_WORLD)
SET_SOURCE_FILES_PROPERTIES(main.cpp PROPERTIES COMPILE_FLAGS -DHELLO_WORLD)
TARGET_COMPILE_DEFINITIONS/COMPILE_DEFINITIONS

велосипеды — тема!

для lostfilma'a генерю свой rss с прямыми ссылками на торренты
т.к. надоело наблюдать «торрент неверно закодирован» в utorrent под win
Бьёрн Страуструп создал С++ 36 лет назад, и он до сих пор востребован и пользуется популярностью у разработчиков, потому что в нём целых два плюса из коробки и Sвоя Tёплая и Lамповая библиотека.
На windows с первой попытки не заработало
открыл примерно такой cmake list
cmake_minimum_required(VERSION 2.8)

project(SomeName)

include(Settings)

SET(BUILD_SHARED_LIBS)#pugixml
ADD_SUBDIRECTORY(${LIBS_DIR}/pugixml/scripts/)
ADD_SUBDIRECTORY(${SOURCES_DIR}/SomeName1/)
ADD_SUBDIRECTORY(${SOURCES_DIR}/SomeName2/)
ADD_SUBDIRECTORY(${SOURCES_DIR}/SomeName3/)


Error:Environment is not selected
+ в ивентах ошибка для hg 9:23:50 Could not execute hg status command: [abort: path contains illegal component: .hg\wlock]
mingw на машине нет, хотелось посмотреть функционал cmake
а Innosetup можно WIX'ом заменить
тоже большей частью в декларативном стиле будет
с чего вы взяли, что я написал о том что он сам собирает? :)

в коментарии вопрос: почему gmake + батники если можно CMake + 2 команды

а апгрэйд системы до win7/8 — вполне разумное решения проблемы не работающего VS2012
вам похоже возится со скриптами вполне нравится :)
я бы уже во второй раз вернувшись к такому проекту, покромсал бы без жалости вдоль и поперёк, чтобы максимально упростить мигрирование на новую версию

а почему не cmake?

из коробки поддерживает все версии Visual Studio
Visual Studio 6
Visual Studio 7
Visual Studio 7 .NET 2003
Visual Studio 8 2005
Visual Studio 9 2008
Visual Studio 10 2010
Visual Studio 11 2012
Visual Studio 12 2013
и тд
www.cmake.org/cmake/help/v3.0/manual/cmake-generators.7.html

для сборки достаточно 2 комманд, открывать visual studio не надо
cmake -G «имя генератора» «dir»
cmake --build «dir» --target «tgt» --config «cfg»

boost ищется так: find_package(BOOST) (можно задать версию, если не в стандартной локации, то чуть длинее)
в вашем случае правда один раз придётся задать настройки всем компиляторам, т.к. у вас они лежат в отдельных директориях
как то потребовалось использовать openssl на windows, так оценив весь масштаб «танцев» со сборкой, установил готовые бинарники отсюда slproweb.com/products/Win32OpenSSL.html
поддержу
для экстримальных туристических условий лучше гармина нет

2а ходовых дня под дождём на одном комплекте батареек ни один телефон не протянет
для 60csx это вполне себе рабочие условия

PS: garmin 64st весьма неплох по описанию(интересно только реальная живучесть на 1 комплекте батареек)
спасибо за разминку
Решение в лоб на python'e
def position(a):
    x = 0
    y = 0
    minX, maxX = 1, a - 1
    minY, maxY = 0, a - 1
    xyz = 1
    for count in range(1, a**2 + 1, 1):
        yield x, y
        if xyz == 1:
            y += 1
            if y == maxY:
                xyz +=1
                maxY -=1
        elif xyz == 2:
            x += 1
            if x == maxX:
                xyz +=1
                maxX -=1
        elif xyz == 3:
            y -= 1
            if y == minY:
                xyz +=1
                minY +=1
        elif xyz == 4:
            x -= 1
            if x == minX:
                xyz +=1
                minX +=1
        if xyz > 4:
            xyz = 1


def PrintHelix(z):
    a = len(z)
    for x in range(a):
        row = ""
        for y in range(a):
            row += " " + z[x][y]
        print (row)

a = 3# len
z = [[0]*a for x in range(a)]
for index, (x,y) in enumerate(position(a), 1):
    z[x][y] = str(index)
PrintHelix(z)
домой для своих проектов и на работу для рабочих. вполне обычная ситуация.

на работе могут и не купить потому что нальство жадины. не допросишься лицензию на какой-нибудь Visual Assist или вменяемый memory/performance profiler, а если предложить статический анализатор даже смеятся не будут. (купить персональную лицензию в данном случае вполне себе выход. ЗП выше рынка вполне себе основание для такого подхода)
в моем случае ещё бывает

LOGGER() << formatted("....", param1, param2,...); 

чтобы избежать вычисления параметров, хотелось бы чтобы этот код вообще не вызывался.
class fake_logger
{
public:
    template<class T>
    void operator << (const T& any)
    {}
};

#ifdef BUILD_ON_WINDOWS
    #define LOGGER() (true) ? __noop : fake_logger()
#else
    #define LOGGER() (true) ? void() : fake_logger()
#endif

да макросы плохо, но бывает пользуюсь такой особеностью
чтобы «выключать» логгер в релизе и использовать синтаксис аля для стримов
LOGGER() << «blahblahblah»;

Информация

В рейтинге
Не участвует
Откуда
Минск, Минская обл., Беларусь
Зарегистрирован
Активность