小编Com*_*sMS的帖子

CMake find_package对子项目的依赖

我有以下目录布局:

main_folder
 + static_lib1
 + executable
Run Code Online (Sandbox Code Playgroud)
  • 'static_lib1'和'executable'都具有完整的CMakeLists,因此可以独立构建它们。
  • “可执行文件”取决于“ static_lib1”。它用于find_package()定位“ static_lib1”。
  • main_folder包含一个CMakeLists,该列表同时包含“ static_lib1”和“ executable”通过add_subdirectory,可方便地一次构建整个项目。

如果我手动构建“ static_lib1”,然后再“可执行”,则一切正常。但是从主文件夹运行CMakeLists时,出现错误,因为find_package无法从“ static_lib1”中找到尚未构建的库文件。

如何在保持CMakeLists文件分离的同时解决该问题(即,不将static_lib的CMakeLists与可执行文件的CMakeLists包括在内)?

cmake

5
推荐指数
1
解决办法
1913
查看次数

从格式为ddMMMyyyy hhmm的字符串解析日期时间(带月份名称)

我有点陷入一个问题,我无法解析字符串中的日期和时间,我正在从文本文件中读取.我得到的字符串采用以下格式:

05SEP1998 2400

我试图通过以下代码解析字符串:

string dateTimeStr = "05SEP1998 2400"

var provider = CultureInfo.InvariantCulture;

const string Format = "ddMMMyyyy hhmm";

var dateTime = DateTime.ParseExact(dateTimeStr, Format, provider);
Run Code Online (Sandbox Code Playgroud)

但在解析时,上面的代码抛出FormatException:

String was not recognized as a valid DateTime.

有人可以帮我解决这个问题吗?

c# string-parsing

5
推荐指数
1
解决办法
2005
查看次数

如何从Lua中的第三方库中捕获错误消息?

我已经采用了LuaJSON来解析JSON.解析调用似乎是这样的:

-- file.lua
local res = json.decode.decode(json_str)
if res == nil then
    throw('invalid JSON')
end
...
Run Code Online (Sandbox Code Playgroud)

但如果json_str是严重格式化时,decode()将在LuaJSON停止和中断的执行file.lua.我希望控制流返回到我的函数,所以我可以提供自定义错误通知.

我浏览了LuaJSON API,并且没有类似回调的错误处理.我想知道是否有任何Lua机制允许我从file.lua中处理LuaJSON中发生的错误?

lua json ierrorhandler

5
推荐指数
1
解决办法
1122
查看次数

如何检测谷歌地图V2 for Android中的用户滚动事件

我的应用程序有单独的算法来获取滚动更改和用户位置更改的数据.对于位置更改使用com.google.android.gms.location.LocationListener 哪个工作正常.

但对于用户滚动,我得到了 mMap.setOnCameraChangeListener(new OnCameraChangeListener().但问题是com.google.android.gms.location.LocationListene还会触发 mMap.setOnCameraChangeListener(new OnCameraChangeListener().

那么如何区分.目前我使用布尔值来区分,但它不可靠和肮脏.

events android scroll google-maps-android-api-2

5
推荐指数
2
解决办法
3924
查看次数

Lua从C添加/更改全局变量

我有一个小的Lua脚本:

function g ()
    print( AUp);
end
Run Code Online (Sandbox Code Playgroud)

从CI加载脚本,添加一个名为AUp的变量,让它运行几百次.

for( i=0; i<2000; i++)
{
    num= i;
    lua_pushnumber( L, i);
    lua_setglobal( L, "AUp");

    lua_getglobal( L, "g");
    if (lua_call( L, 0, 0) != 0)
       printf( "%s", lua_tostring(L, -1));
}
Run Code Online (Sandbox Code Playgroud)

始终是打印输出为0.如果我输入(i + 1),则输出始终为1.我无法更改AUp的值.该值保持不变,就像第一次调用lua_pushnumner和lua_setglobal时一样.

怎么了?该函数应该一次又一次地调用,但是AUp的值可以改变,所以我必须在调用之前更新它lua_call.

c variables lua

5
推荐指数
1
解决办法
6855
查看次数

为什么打开的DLL句柄不能保护文件不被移动?

我刚刚遇到一个令人惊讶的错误,其中使用LoadLibraryAPI调用加载的DLL文件在加载时被重命名.显然,在文件上使用打开的DLL句柄不会阻止重命名该文件,甚至不会将其移动到其他路径.但是,它可以防止删除并移动到其他磁盘.如果发生这种情况,使用DLL的程序继续正常工作.ProcessExplorer显示DLL处理的路径相应地更新.

此行为与Windows中的普通文件句柄不同.例如,当std::ifstream对同一DLL 保持打开状态时,操作系统不再允许重命名.我发现这种行为非常令人惊讶,并且想知道是否有人可以给出解释呢?特别是我对允许这样做的理由感兴趣,因为我认为跟踪磁盘上的文件比将其锁定到位更困难.所以操作系统可能必须积极支持这个功能,这意味着必须有一个用例呢?

windows dll winapi filehandle

5
推荐指数
1
解决办法
925
查看次数

CMAKE在哪里获取环境变量?

如果我输入控制台:

$ echo $COCOS_ROOT
Run Code Online (Sandbox Code Playgroud)

我得到了正确的路径,因为我在.bashrc文件中定义了这个变量.但是,当我执行此代码时,

SET(COCOS_HOME "$ENV{COCOS_ROOT}")
if (COCOS_HOME)
    message( STATUS "COCOS2D installed in" ${COCOS_HOME})
else()
    message( WARNING "COCOS2D is undefined")
endif()
Run Code Online (Sandbox Code Playgroud)

未定义环境var.如果我在控制台制作中定义ENV var:

$ export COCOS_ROOT=/path/to/cocos
Run Code Online (Sandbox Code Playgroud)

然后使用cocos2D路径正确设置脚本.

我的问题是:我需要在哪里定义cmake找到的env变量?

谢谢

bash cmake

4
推荐指数
1
解决办法
2034
查看次数

在尝试查找Boost时,CMake会报告"Boost_DIR-NOT_FOUND"

我想在我的机器上建立一个名为CSWNet的库.Cmake可以找到Boost_INCLUDE_DIR和Boost_LIB_DIR,但它找不到名为Boost_DIR的选项,它是一个包含Boost的CMake配置文件的目录.它在哪里?请帮助,谢谢你.我得到的错误如下所示,我从ubuntu存储库安装了boost,它安装在/ usr/local中.

 CMake Error at /usr/local/share/cmake-2.8/Modules/FindBoost.cmake:429 (message):
When requesting a specific version of Boost, you must provide at least the
major and minor version numbers, e.g., 1.34
Call Stack (most recent call first):
demos/CMakeLists.txt:149 (find_package)
Run Code Online (Sandbox Code Playgroud)

boost cmake

3
推荐指数
1
解决办法
2万
查看次数

折叠表达式的评估顺序

折叠表达式似乎是将函数应用于元组的每个元素的好方法.但是,如果应用的函数具有副作用,则函数调用的顺序可能是一个重要的问题.

考虑:

#include <iostream>

template<typename... Ts>
void printStuff(Ts... args)
{
    ( ([](auto&& v) { std::cout << v << " "; })(args), ... );
    std::cout << '\n';
}

int main()
{
    printStuff("hello", 42, 1.5f);
    // expected output: hello 42 1.5
}
Run Code Online (Sandbox Code Playgroud)

似乎有效.

但是这里保证lambda的评估顺序还是最终可能会在输出中翻转这些值?如果我使用不同的运算符将命令链接在一起,答案是否会改变?

c++ fold-expression c++17

3
推荐指数
1
解决办法
371
查看次数

CMakeList设置CMAKE_PREFIX_PATH

如果我跑步

cmake -DCMAKE_PREFIX_PATH=/home/rip/Qt/5.12.1/gcc_64/lib/cmake
Run Code Online (Sandbox Code Playgroud)

一切正常。但是如果我写

set(CMAKE_PREFIX_PATH "/home/rip/Qt/5.12.1/gcc_64/lib/cmake")
Run Code Online (Sandbox Code Playgroud)

CMakeLists.txt并且仅运行cmake中,显示以下错误消息:

Could not find a package configuration file provided by "Qt5Quick" with any
  of the following names:

   Qt5QuickConfig.cmake
   qt5quick-config.cmake
Run Code Online (Sandbox Code Playgroud)

这是完整的代码:

set(CMAKE_CXX_FLAGS " -O3 -fopenmp")
set(CMAKE_PREFIX_PATH "/home/rip/Qt/5.12.1/gcc_64/lib/cmake")

project(${PROJECT_NAME} LANGUAGES CXX)

set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

set(SOURCES main.cpp Test5.cpp )
set(HAEDERS Test5.h )
set(RESOURCES qml.qrc )

find_package(Qt5 COMPONENTS Core Quick REQUIRED)
add_executable(${PROJECT_NAME} ${SOURCES} ${HAEDERS} ${RESOURCES}) 
target_compile_definitions(${PROJECT_NAME} PRIVATE $,$>:QT_QML_DEBUG>) 
target_link_libraries(${PROJECT_NAME} PRIVATE Qt5::Core Qt5::Quick)
Run Code Online (Sandbox Code Playgroud)

c++ qt cmake

3
推荐指数
1
解决办法
2860
查看次数