我正在使用IntelliJ IDEA和Java.我有我的主程序,命名SearchEngine
应该构建一个可执行文件SearchEngine.jar
.但是,我的代码中依赖于3个额外的.jar文件.我添加了这些依赖项,我的程序运行正常.
我想建立一个可执行的.jar,它不包括它里面的3个额外的.jar文件,而是,它会将他们的lib
文件夹中.就此而言,我选择了以下选项:
当我不更改Artifacts项目设置选项卡中的设置时,我得到4个.jar文件,其中1个是我的可执行文件,3个是额外的.jar文件.这样一来,一切工作正常.
然而,当我尝试并添加里面的3个额外的.jar文件lib
夹,我的可执行文件并不能正常工作,即使3个额外的.jar文件一在得到复制lib
文件夹中.如何使这项工作?
我有以下CMakeLists.txt:
cmake_minimum_required(VERSION 3.3)
project(Thesis)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
set(SOURCE_FILES main.cpp Graph.h Graph.cpp)
add_executable(Thesis ${SOURCE_FILES})
Run Code Online (Sandbox Code Playgroud)
我在自定义文件夹上使用Run-> Build(作为发行版)ClionProjects\Thesis\exe\Release
,我得到一个可执行文件Thesis.exe
.如果我打开它,我会收到以下连续错误:
我到底错过了什么?
每当我想在Clion中包含一个位于我项目之外的目录时,我就会使用该-I somedir
标志.但是这一次,我想做的是拥有这样的层次结构:
/project
CMakeLists.txt
/src
/Graph
Graph.h
Graph.cpp
/Dijkstra
Dijkstra.h
Dijstra.cpp
Run Code Online (Sandbox Code Playgroud)
我想把我的代码放在一个/src
目录中.不仅如此,而且,例如,在文件中Dijkstra.h
我想要包含Graph.h,就像这样:#include "Graph/Graph.h
而不是这样:#include "../Graph/Graph.h
.
如果我只添加一个-I src
标志,那么如果我在Dijkstra.h
文件中并且我想要包含Graph.h
,我将不得不写#include "../Graph/Graph.h
,这不是我想要的.
所以我也尝试添加INCLUDE_DIRECTORIES(src)
.这解决了上面的问题,但是当尝试编译时,我收到了一个链接器错误undefined reference to...
.
所以我尝试逐个添加文件,如下所示:
set(SOURCE_FILES
src/Dijkstra/Dijkstra.h
src/Dijkstra/Dijkstra.cpp
src/Graph/Graph.h
src/Graph/Graph.cpp)
add_executable(someprojectname ${SOURCE_FILES})
Run Code Online (Sandbox Code Playgroud)
这带回了以前的问题,我必须包含这样的文件:#include "../Graph/Graph.h"
.
我怎样才能正确地做到这一点才能得到我想要的行为?
我使用monogame和xamarin studio为android做了一个游戏.我切换到"发布"版本,当我构建我的解决方案时,.apk是35.6MB.请注意,我将其复制到手机上并安装它并且可以正常工作.但是我怎么能减小这个尺寸?http://developer.xamarin.com/guides/android/advanced_topics/application_package_sizes/在他们的网站上,他们提到了一些关于"链接"的例子,他们将"hello world"项目从15.8MB减少到4.4MB.我真的不明白我怎么能做到这一点,因为他们没有给出任何指示.你们任何人都知道怎么做?
更改"链接"保存,重建解决方案,然后重新调整并没有改变生成的.apk大小
Solution1
:{ Project1
(windows form),Project2
(类库)}
尝试复制编译后得到的所有.dll Project1
,从默认目录(与.exe相同)到/lib
子文件夹.
if not exist Lib mkdir Lib
for %i in (*.dll) move /Y "$(TargetDir)%i" "$(TargetDir)Lib\%i"
Run Code Online (Sandbox Code Playgroud)
我的for %i in (*.dll)
语法有问题.这样做的正确方法是什么?
注意:这不会产生任何错误(但只会复制1个.dll,而不是全部):
if not exist Lib mkdir Lib
move /Y "$(TargetDir)first.dll" "$(TargetDir)Lib\first.dll"
Run Code Online (Sandbox Code Playgroud) 我想获取每个作者的所有提交信息,但我想对每个文件执行此操作。我对文档有点迷失git
。有人知道该怎么做吗?我想在一段时间内这样做,例如 2014-2016 年。
虽然我有一些c#的经验,但这是我在C#中的第一款游戏.我正在尝试建立游戏的最小骨架.我听说这Tick Event
是创建主游戏循环的糟糕方法.
这是我想要实现的主要概念:
Program.cs中
//Program.cs calls the Game Form.
Application.Run(new Game());
Run Code Online (Sandbox Code Playgroud)
Game.cs
public partial class Game : Form
{
int TotalFramesCount = 0;
int TotalTimeElapsedInSeconds = 0;
public Game()
{
InitializeComponent();
GameStart();
}
public void GameStart()
{
GameInitialize();
while(true)
{
GameUpdate();
TotalFramesCount++;
CalculateTotalTimeElapsedInSeconds();
//Have a label to display FPS
label1.text = TotalFramesCount/TotalTimeElapsedInSeconds;
}
}
private void GameInitialize()
{
//Initializes variables to create the First frame.
}
private void GameUpdate()
{
// Creates the Next …
Run Code Online (Sandbox Code Playgroud) 最终的静态变量操作是在运行时还是编译时发生的?例如:
public static final int ID_1 = 1;
public static final int ID_2 = 2;
public static int test(){
return ID_1 + ID_2; // Does this addition execute in compile or runtime ?
}
Run Code Online (Sandbox Code Playgroud) 我之前发过一个问题,问为什么我的服务器(用C++编写boost::asio
)无法与客户端连接(用Javascript编写).问题是Javascript Websockets与boost::asio
套接字不同吗?难道boost::asio
不支持WebSockets的?最简单的方法是什么?