Я пытаюсь начать развиваться в 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: ""
а затем возвращается к подсказке. - Если это помогает).
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 предполагает, что в результате исполняемого файла также потребуется множество параметров, прежде чем он сделает что-нибудь интересное.
Мы используем g++ с его c++ интерфейсом (против gcc) и scons как модель сборки. Это хорошо работает и довольно просто развертывать. Я бы предложил попробовать следующий выпуск Ubuntu 14.04, поскольку он будет содержать стабильную версию Wt в своих пакетах.
.cpp
и попытка в Ubuntu ничего не решит в Windows (GNU / Linux может быть лучше для разработки, чем Windows, но это не делает его актуальным для Windows- конкретный вопрос).