Wt a.exe файл не запускается

0

Я пытаюсь начать развиваться в WT, но это не работает. Я использую Windows 8, загрузил Wt 3.3.1 и загрузил код-12.11mingw-setup_user.exe с компилятором GCC и отладчиком GDB. Но я не использую блоки кода, потому что компилятору не нравились директивы preproccessor cmake в WtConfig.h. Поэтому я попытался скомпилировать вручную (я новичок в использовании этого типа техники, поэтому мне пришлось его искать).

У меня есть проект:

└───HelloWorldWt
    └───source
        ├───bin
        │   ├───Debug
        │   │   └───CMakeFiles
        │   │       └───CMakeFiles
        │   └───Release
        ├───build
        └───source
        |   └───CMakeFiles
        |       └───wt_project.wt.dir
        |       |___CMakeLists.txt
        |       |
        |       |___main.cpp
        |____CMakeLists.txt

Main.cpp имеет (это пример HelloWorld с http://www.webtoolkit.eu/wt/examples/):

/* * Авторское право (C) 2008 Emweb bvba, Heverlee, Belgium. * * См. Файл LICENSE для условий использования. */

#include <Wt/WApplication>
#include <Wt/WBreak>
#include <Wt/WContainerWidget>
#include <Wt/WLineEdit>
#include <Wt/WPushButton>
#include <Wt/WText>

// c++0x only, for std::bind
// #include <functional>

using namespace Wt;

/*
 * A simple hello world application class which demonstrates how to react
 * to events, read input, and give feed-back.
 */
class HelloApplication : public WApplication
{
public:
  HelloApplication(const WEnvironment& env);

private:
  WLineEdit *nameEdit_;
  WText *greeting_;

  void greet();
};

/*
 * The env argument contains information about the new session, and
 * the initial request. It must be passed to the WApplication
 * constructor so it is typically also an argument for your custom
 * application constructor.
*/
HelloApplication::HelloApplication(const WEnvironment& env)
  : WApplication(env)
{
  setTitle("Hello world");                               // application title

  root()->addWidget(new WText("Your name, please ? "));  // show some text
  nameEdit_ = new WLineEdit(root());                     // allow text input
  nameEdit_->setFocus();                                 // give focus

  WPushButton *button
    = new WPushButton("Greet me.", root());              // create a button
  button->setMargin(5, Left);                            // add 5 pixels margin

  root()->addWidget(new WBreak());                       // insert a line break

  greeting_ = new WText(root());                         // empty text

  /*
   * Connect signals with slots
   *
   * - simple Wt-way
   */
  button->clicked().connect(this, &HelloApplication::greet);

  /*
   * - using an arbitrary function object (binding values with boost::bind())
   */
  nameEdit_->enterPressed().connect
    (boost::bind(&HelloApplication::greet, this));

  /*
   * - using a c++0x lambda:
   */
  // b->clicked().connect(std::bind([=]() {
  //       greeting_->setText("Hello there, " + nameEdit_->text());
  // }));
}

void HelloApplication::greet()
{
  /*
   * Update the text, using text input into the nameEdit_ field.
   */
  greeting_->setText("Hello there, " + nameEdit_->text());
}

WApplication *createApplication(const WEnvironment& env)
{
  /*
   * You could read information from the environment to decide whether
   * the user has permission to start a new application
   */
  return new HelloApplication(env);
}

int main(int argc, char **argv)
{
  /*
   * Your main method may set up some shared resources, but should then
   * start the server application (FastCGI or httpd) that starts listening
   * for requests, and handles all of the application life cycles.
   *
   * The last argument to WRun specifies the function that will instantiate
   * new application objects. That function is executed when a new user surfs
   * to the Wt application, and after the library has negotiated browser
   * support. The function should return a newly instantiated application
   * object.
   */
  int retval = WRun(argc, argv, &createApplication);
  char* ch = new ch();
  cin() >> ch;
  return retval;
}

HelloWorldWt/CMakeLists.txt имеет:

CMAKE_MINIMUM_REQUIRED(VERSION 2.6)

PROJECT(WT_HELLO_WORLD)

SET (WT_CONNECTOR "wtfcgi" CACHE STRING "Connector used (wthttp or wtfcgi)")

ADD_SUBDIRECTORY(source)

HelloWorldWt/source/CMakeLists.txt имеет

SET(WT_PROJECT_SOURCE
main.cpp
)

SET(WT_PROJECT_TARGET wt_project.wt)

ADD_EXECUTABLE(${WT_PROJECT_TARGET} ${WT_PROJECT_SOURCE})

TARGET_LINK_LIBRARIES(${WT_PROJECT_TARGET} ${WT_CONNECTOR} wt)

INCLUDE_DIRECTORIES("C:/Users/Me/My Code Libraries/wt-3.3.1/src")

Я тогда побежал

cmake .. -G "MinGW Makefiles" from the MyCode directory

Это создало несколько файлов, это создало cmake_install.cmake, среди других файлов.

Затем я побежал: cmake.. -G "MinGW Makefiles" из HelloWorldWt/source, затем я запустил: cmake -P cmake_install.cmake

У меня тогда был файл My Code\HelloWorldWt\source\build\CMakeFiles\2.8.12\CompilerIdCXX\a.exe, и я щелкнул эту программу, чтобы запустить его, и только что открытое консольное окно было закрыто.

что мне здесь не хватает? Я пытаюсь запустить приложение Wt, но пока не могу это сделать

(Может быть, я должен отметить, что когда я использую команду:

cmake -P cmake_install.cmake

консоль cmd, отвечает

-- Install configuration: ""

а затем возвращается к подсказке. - Если это помогает).

  • 0
    Не нажимайте на него изнутри проводника. Запустите cmd (сдвинув правой кнопкой мыши CompilerIdCXX и выбрав здесь Open Command window), а затем выполните его из командной строки - это покажет вам ошибку, которая выводится на печать, потому что окно не закроется таким образом.
  • 0
    Когда я запускаю a.exe из этой папки, консоль не печатает никаких сообщений и сразу завершает работу, ничего не делая.
Показать ещё 4 комментария
Теги:
makefile
gcc
wt

2 ответа

0
 My Code\HelloWorldWt\source\build\CMakeFiles\2.8.12\CompilerIdCXX\a.exe

Не файл, который вы хотите запустить. Это внутренний CMake-тест cmake, созданный во время конфигурации, для проверки того, что выбранный компилятор даже компилирует и обнаруживает целевую архитектуру.

Вы исполняемый файл будет называться

My Code\HelloWorldWt\source\build\wt_project.wt.exe

когда вы его скомпилируете.

Чтобы скомпилировать его, вы либо вызываете make, либо другую соответствующую команду сборки в зависимости от выбранного генератора, или можете попросить cmake вызвать его для вас с помощью команды:

cmake --build .

Код, который вы вставили, содержит синтаксическую ошибку,

cin() >> ch;

должно быть

std::cin >> ch;

ch должен быть char, а не char *), который подтверждает, что вы еще не пытались его скомпилировать.

Я должен добавить, что краткий взгляд на документацию WT предполагает, что в результате исполняемого файла также потребуется множество параметров, прежде чем он сделает что-нибудь интересное.

-2

Мы используем g++ с его c++ интерфейсом (против gcc) и scons как модель сборки. Это хорошо работает и довольно просто развертывать. Я бы предложил попробовать следующий выпуск Ubuntu 14.04, поскольку он будет содержать стабильную версию Wt в своих пакетах.

  • 0
    Это не имеет отношения к делу, -1. CMake знает достаточно хорошо, чтобы использовать соответствующий драйвер компилятора C ++ для чего-либо с расширением .cpp и попытка в Ubuntu ничего не решит в Windows (GNU / Linux может быть лучше для разработки, чем Windows, но это не делает его актуальным для Windows- конкретный вопрос).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню