© EVILEG 2015-2018
Рекомендует хостинг
TIMEWEB
15 января 2018 г. 6:33

Проблема добавления #DEFINE при сборке CMak'ом

При сборке проекта появилась такая надпись:

Please define _WIN32_WINNT or _WIN32_WINDOWS appropriately. For example: - add -D_WIN32_WINNT=0x0501 to the compiler command line; or - add _WIN32_WINNT=0x0501 to your project's Preprocessor Definitions.
Погуглив я попробовал и:
add_definitions(-D_WIN32_WINNT=0x0501)
и:
target_compile_definitions(SampleTnsClient PUBLIC _WIN32_WINNT=0x0501)
В обоих случаях получал ошибки(Это первая, но они однотипны):
4>PerformanceTest.obj : error LNK2001: unresolved external symbol "public: static void __cdecl boost::log::v2s_mt_nt5::record_view::public_data::destroy(struct boost::log::v2s_mt_nt5::record_view::public_data const *)" (?destroy@public_data@record_view@v2s_mt_nt5@log@boost@@SAXPEBU12345@@Z)
Код CMakeLists:
cmake_minimum_required(VERSION 3.7)

project(TNS_APP LANGUAGES CXX)

include(../thirdparties/liblinenoise-ng.cmake)

set(SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
set(APP_SOURCES "${SRC_DIR}/main.cpp"
                "${SRC_DIR}/SampleClientConfig.h"
                "${SRC_DIR}/SampleClientUtils.h"
                "${SRC_DIR}/SampleClientUtils.cpp"
                "${SRC_DIR}/Context.h"
                "${SRC_DIR}/Command.h"
                "${SRC_DIR}/Command.cpp"
                "${SRC_DIR}/SampleClientLog.h"
                "${SRC_DIR}/SampleClientLog.cpp"
                "${SRC_DIR}/PerformanceTest.h"
                "${SRC_DIR}/PerformanceTest.cpp"
                "${SRC_DIR}/SampleMessage.h"
                "${SRC_DIR}/SampleMessage.cpp"
                "${SRC_DIR}/SampleConsumer.h"
                "${SRC_DIR}/SampleConsumer.cpp"
                "${SRC_DIR}/DeliveryDelay.h"
                "${SRC_DIR}/DeliveryDelay.cpp"
                "${SRC_DIR}/PerformanceTestProfile.h"
                "${SRC_DIR}/PerformanceTestProfile.cpp"
                "${SRC_DIR}/PerformanceTestExecutor.h"
                "${SRC_DIR}/PerformanceTestExecutor.cpp"
                "${SRC_DIR}/SimplePositiveRandomGenerator.h"
                "${SRC_DIR}/SampleMessageProducer.h"
                "${SRC_DIR}/SampleMessageProducer.cpp"
                "${SRC_DIR}/SampleMessageAccumulator.h"
                "${SRC_DIR}/SampleMessageAccumulator.cpp")
                
add_executable(SampleTnsClient ${APP_SOURCES})
target_link_libraries(SampleTnsClient PRIVATE 
                        TnsClientLibrary 
                        Boost::program_options 
                        Boost::locale 
                        Boost::system 
                        Boost::filesystem 
                        Boost::log
                        liblinenoise-ng
                        librdkafkacpp 
                        librdkafka)
add_definitions(-D_WIN32_WINNT=0x0501)
find_program(PANDOC pandoc)
if(PANDOC)
  add_custom_target(SampleTnsClientDocs
    COMMAND pandoc "${SRC_DIR}/Readme.md" --latex-engine=xelatex -o "${CMAKE_CURRENT_BINARY_DIR}/Readme.pdf")
endif()

if(WIN32)
    target_compile_options(SampleTnsClient PRIVATE /wd4503 /wd4714)
endif()
  • #
  • 15 января 2018 г. 7:28

Добрый день.
Попробуйте вот в таком порядке сделать, я не сколько раз натыкался на случай когда та или иная строка не принималась потому что не там была.

cmake_minimum_required(VERSION 3.5.1)
project(Gener095) include_directories(../../088/SharedCode) add_definitions(-DGENER095_LIBRARY -DFRIEND_CLASS=Gener095_TestClass) add_definitions(-DLIB_NAME=\"${PROJECT_NAME}\") set(VERSION_TARGET "0.1.0") set(SOURCE_FILES Messages/message_095_data.cpp Messages/message_095_data.h gener095_core.cpp gener095_core.h gener095_global.cpp gener095_global.h taremanager.cpp taremanager.h ) qt5_add_resources(RCC_RESOURCES gener095_resources.qrc) project_generate_version("${VERSION_TARGET}" "lib") add_library(${PROJECT_NAME} SHARED ${SOURCE_FILES} ${RCC_RESOURCES}) target_link_libraries(${PROJECT_NAME} PUBLIC Qt5::Xml) target_link_libraries(${PROJECT_NAME} PUBLIC Qt5::Gui) target_link_libraries(${PROJECT_NAME} PUBLIC SharedCode) target_include_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/../../088) link_directories(${CMAKE_BINARY_DIR}/088/build-libs/SharedCode)
cmake_minimum_required(VERSION 3.7)

project(TNS_APP LANGUAGES CXX)

include(../thirdparties/liblinenoise-ng.cmake)

add_definitions(-D_WIN32_WINNT=0x0501)

set(SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
set(APP_SOURCES "${SRC_DIR}/main.cpp"
                "${SRC_DIR}/SampleClientConfig.h"
                "${SRC_DIR}/SampleClientUtils.h"
                "${SRC_DIR}/SampleClientUtils.cpp"
                "${SRC_DIR}/Context.h"
                "${SRC_DIR}/Command.h"
                "${SRC_DIR}/Command.cpp"
                "${SRC_DIR}/SampleClientLog.h"
                "${SRC_DIR}/SampleClientLog.cpp"
                "${SRC_DIR}/PerformanceTest.h"
                "${SRC_DIR}/PerformanceTest.cpp"
                "${SRC_DIR}/SampleMessage.h"
                "${SRC_DIR}/SampleMessage.cpp"
                "${SRC_DIR}/SampleConsumer.h"
                "${SRC_DIR}/SampleConsumer.cpp"
                "${SRC_DIR}/DeliveryDelay.h"
                "${SRC_DIR}/DeliveryDelay.cpp"
                "${SRC_DIR}/PerformanceTestProfile.h"
                "${SRC_DIR}/PerformanceTestProfile.cpp"
                "${SRC_DIR}/PerformanceTestExecutor.h"
                "${SRC_DIR}/PerformanceTestExecutor.cpp"
                "${SRC_DIR}/SimplePositiveRandomGenerator.h"
                "${SRC_DIR}/SampleMessageProducer.h"
                "${SRC_DIR}/SampleMessageProducer.cpp"
                "${SRC_DIR}/SampleMessageAccumulator.h"
                "${SRC_DIR}/SampleMessageAccumulator.cpp")
                
add_executable(SampleTnsClient ${APP_SOURCES})
target_link_libraries(SampleTnsClient PRIVATE 
                        TnsClientLibrary 
                        Boost::program_options 
                        Boost::locale 
                        Boost::system 
                        Boost::filesystem 
                        Boost::log
                        liblinenoise-ng
                        librdkafkacpp 
                        librdkafka)

find_program(PANDOC pandoc)
if(PANDOC)
  add_custom_target(SampleTnsClientDocs
    COMMAND pandoc "${SRC_DIR}/Readme.md" --latex-engine=xelatex -o "${CMAKE_CURRENT_BINARY_DIR}/Readme.pdf")
endif()

if(WIN32)
    target_compile_options(SampleTnsClient PRIVATE /wd4503 /wd4714)
endif()
Сделал вот так. Но те же ошибки. А еще чем отличается cmake target_compile_definitions от add_definitions

Я выяснил, что проблема в том, что boost и проект конфликтуют . Но не очень понимаю, как сделать так чтобы boos.Log собирался с определенным макро. Да еще и желательно только на виндоус такая конфигурация.

Вот boost.cmake:
set(BOOST_INCLUDEDIR ${IMPORT_PATH}/include)
set(BOOST_LIBRARYDIR ${IMPORT_LIBS_PATH}/Debug ${IMPORT_LIBS_PATH}/Release)
set(Boost_USE_STATIC_LIBS ON)
add_definitions(-D_WIN32_WINNT=0x0501 -DBOOST_USE_WINAPI_VERSION=0x0501)
find_package(Boost REQUIRED COMPONENTS unit_test_framework thread program_options locale system filesystem log)
Такой вариант не работает

А Вы не пробовали сделать предкомпилированные библиотеки boost под свою систему, а потом уже подключать собранные библиотеки Boost`а?
Просто один только boost может собираться на пару гигабайт и это занимает приличное время, тем более, что Вы вряд ли будете править его библиотеки, поэтому и статическая сборка Boost`а в рамках вашего проекта не несёт смысла... То есть соберите его отдельно с необходимыми макросами, да подключите в проект предкомпилированные библиотеки.

Для Django рекомендую VDS-хостинг TIMEWEB

Ответы

Только авторизованные пользователи могут отвечать на форуме.
Пожалуйста, Авторизуйтесь или Зарегистрируйтесь
15 октября 2018 г. 21:36
Allyans .

C++ - Тест 001. Первая программа и типы данных

  • Результат 60баллов,
  • Очки рейтинга-1
15 октября 2018 г. 11:25
Екатерина Самойлова

C++ - Тест 002. Константы

  • Результат 33баллов,
  • Очки рейтинга-10
15 октября 2018 г. 11:17
Екатерина Самойлова

C++ - Тест 006. Перечисления

  • Результат 80баллов,
  • Очки рейтинга4
Последние комментарии
17 октября 2018 г. 8:43
pasagir

Qt/C++ - Урок 006. QSqlQueryModel - Таблицы в Qt с помощью SQL-запросов

Не получается bool DataBase::insertDataIntoDB(QVariantList data){ QSqlQuery query(db); QString str; qDebug()<<"InsertInsertInsertInsertInsert"<<QThread::curre...
17 октября 2018 г. 7:09
Евгений Легоцкой

Qt/C++ - Урок 006. QSqlQueryModel - Таблицы в Qt с помощью SQL-запросов

Попробуйте передать инстанс базы данных в конструктор QSqlQuery QSqlQuery q(db);
16 октября 2018 г. 16:14
pasagir

Qt/C++ - Урок 006. QSqlQueryModel - Таблицы в Qt с помощью SQL-запросов

В Qt 5.11. при попытке вставить в БД запись выдает ошибку QSqlQuery::prepare: database not openQSqlDatabasePrivate::database: requested database does not belong to the calling thread. ...
10 октября 2018 г. 9:50
Евгений Легоцкой

Qt/C++ - Урок 083. Создание динамической библиотеки и подключение её в другой проект

Если и начинать писать о плагинах, то нужно тогда с Qt Creator начинать, там наверняка будет одинаковый принцип, но по Qt Creator хотя бы информация есть.
Сейчас обсуждают на форуме
17 октября 2018 г. 16:33
Allyans .

Работа с WinAPI в QT(изменение title bar)

Здравствуйте. Я хочу в своей программе изменить цвет title bar. Так как в qt нет не каких функций связаных с этим я искал в интернете ответ на мой вопрос и там советовали функцию SetSysColors(...
17 октября 2018 г. 13:39
Михаиллл

Настройка Qt Creator для Android

Здравствуйте. У меня установлены SDK, NDK. Но для компилятора не хватает arm-linux-android-elf-64bit, 86-linux-android-elf-64bit . Скажите пожалуйста как это исправить?
15 октября 2018 г. 12:45
Allyans .

QGraphicsItem change color

Хорошо)
11 октября 2018 г. 10:13
Arrow

Работа с WebView в QML

Нашел в чем проблема. Пишу на случай если кому-то попадется такое же счастье с WebView как и мне. Проблема как оказалась с Debug версией, так как в Release и Profile все работает (...
10 октября 2018 г. 12:49
Виталий Антипов

Кто что делает на Qt?

Работаем по локальной сети. Файл базы, схемы и фото лежат на сервере. Чтобы не было проблем при одновременной работе с одним файлом, все запросы обернул в транзакции, как указано в документаци...
Присоединяйтесь к нам в социальных сетях