小编Jul*_*rra的帖子

Autotools vs CMake用于Windows和Linux编译

我一直在寻找Autotools和CMake的优点和缺点.但我想知道那些使用这些工具中的一个(或两个)的人的意见.

我基本上在一年前使用过Autotools,我知道其中一个优点是它依赖于shell脚本,因此不需要安装它来运行并使用可移植的shell脚本.但它看起来过于面向unix,并且无法在Windows上运行配置文件.

我现在要为开源项目选择一个构建系统工具,必须至少为Linux和Windows编译.它是用C++编写的,并使用Qt GUI前端,其余部分是"通用的".

谢谢你的帮助.

portability build-process autotools cmake

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

使用cmake的autotools构建库

这是我对cmake的第一次尝试,如果可能的话,我希望有一些关于我做了什么的反馈,因为一些问题仍然存在.

在库文件夹的CMakeLists.txt中,我创建了两个makefile目标:configure-antlr3cantlr3c.第一个目标运行autotools配置shell脚本,第二个目标运行make可执行文件来构建库:

# CMakeLists.txt in libantlr3c-3.1.3 
add_custom_target(
  configure-antlr3c
  ${SHELL_EXECUTABLE} configure
  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)

add_custom_target(
  antlr3c
   ${MAKE}
   DEPENDS configure-antlr3c
   WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
)
Run Code Online (Sandbox Code Playgroud)

主要问题是configure-antlr3c目标总是"过时",因此即使没有发生任何变化也会始终执行.此外,我一定需要在一个单独的目录中生成我的cmake makefile(不在我的项目的根目录中),以避免覆盖库的autotools Makefile ...

有谁有这个问题(用cmake构建autotools项目)?如果是这样,你的解决方案是什么?

谢谢.

编辑:解决方案 在根CMakeLists.txt中:

include(ExternalProject)
ExternalProject_Add(
  libantlr3c
  SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/lib/libantlr3c-3.1.3
  CONFIGURE_COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/lib/libantlr3c-3.1.3/configure --prefix=${CMAKE_CURRENT_SOURCE_DIR}/lib/libantlr3c-3.1.3
  PREFIX ${CMAKE_CURRENT_SOURCE_DIR}/lib/libantlr3c-3.1.3
  BUILD_COMMAND make
  BUILD_IN_SOURCE 1
)
Run Code Online (Sandbox Code Playgroud)

build-automation build-process autotools cmake antlr3

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

在reCAPTCHA之前的HTML5表单验证

我集成了新的隐藏reCAPTCHA(v2)框架,该框架默认使用click提交按钮的事件验证用户.但是在内置HTML5表单验证之前触发此事件.我正在寻找一种方法,使其按预期的顺序进行:首先是表单验证,然后是reCAPTCHA.

html5 recaptcha html5-validation

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

通过std :: function引用的Functor

基本上,我想有以下语义:

#include <functional>
#include <iostream>

class test
{
  public:
    void add(std::function<void()> f)
    {
      f();
    }

    void operator()()
    {
      ++x;
    }

    int x = 33;
};

int main()
{
  test t;
  t.add(t);
  // wanted: x == 34 instead: x == 33 since add(t) copies it
}
Run Code Online (Sandbox Code Playgroud)

我理解std :: function包装了一个可调用对象的副本,但有没有办法使用std :: function获取对可调用对象的引用?

c++ c++11 std-function

20
推荐指数
1
解决办法
4494
查看次数

如何在构建时让docker从私有存储库中取出

有没有办法在私有注册表中提取图像docker build而不是docker hub?

我部署了一个私有注册表,我希望能够避免ip:port在Dockerfile的FROM指令中命名其特定的.我期待一个docker build选项或docker环境变量来更改默认注册表.

docker dockerfile docker-registry docker-trusted-registry

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

使用gcc的C++前端编译C代码的好处

一年前推出的android dalvik平台上的这个提交非常疑问和困惑.

文件扩展名已更改为C++扩展,以便"将解释器移动到C++中" - 使用编译器的C++前端.

这种变化可能带来什么好处?Dalvik Platform是一个100%的C&asm项目,并没有使用任何C++功能.

c c++ android gcc dalvik

13
推荐指数
1
解决办法
460
查看次数

多个进程在同一个端口上侦听?

我试图了解如何在Windows XP上启动多个进程侦听相同的TCP {IP,Port}对.

例如,我可以启动两个ncat.exe程序监听端口371.第二个程序启动没有任何问题,并接收传入连接,而第一个没有.一旦最后开始的过程终止,第一个接收它们.

netstat -a -n | find "LISTENING"
   TCP    0.0.0.0:371            0.0.0.0:0              LISTENING
   TCP    0.0.0.0:371            0.0.0.0:0              LISTENING
Run Code Online (Sandbox Code Playgroud)

假设这是一种Windows(XP)行为,它如何成为一种安全可靠的行为?这意味着可以"重载"任何已经侦听的端口,而不是获取通常的"已使用的地址"错误消息,并简单地绕过防火墙,规则只是说"允许端口371上的任何传入TCP连接".

sockets windows networking tcp

11
推荐指数
1
解决办法
7462
查看次数

是吗 真的匹配任何角色?

我正在使用一个非常简单的sed脚本删除注释: sed -e 's/--.*$//'

它非常有用,直到评论中出现非ascii字符,例如:-- °.此行与正则表达式不匹配,未替换.

知道如何.真正匹配任何角色吗?


方案:

由于file它是iso8859文本,LANG因此在调用之前必须更改变量环境sed: LANG=iso8859 sed -e 's/--.*//' -

ascii sed non-ascii-characters

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

我可以修改其他人的拉取请求并将其推回到其分支中吗?

GitHub解释说,您可以分叉,修改,提交,推送和触发拉取请求.他们还解释说,您仍然可以修改,提交,推送,并在网站上更新请求.

我想知道是否可以做同样的事情但不是叉子的作者?我是一个回购请求的拥有者,我想要纠正自己,但后来仍然在讨论......我试图将我的更改推送到作者的回购(想一些正确的访问将被计算)但访问被拒绝.

github pull-request

9
推荐指数
1
解决办法
2297
查看次数

LD_LIBRARY_PATH副作用

我对改变有着奇怪的副作用LD_LIBRARY_PATH.

当我追加包含库的路径时,例如:

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/my_path/lib
Run Code Online (Sandbox Code Playgroud)

然后,一切都变得令人难以置信地缓慢.例如,一个简单的ls可以是10秒长.

ldd输出是完全一样的前和后LD_LIBRARY_PATH的变化,我试图调试缓慢的执行ls具有strace:我得到了这两种情况下完全相同的执行.在执行过程中执行甚至不会卡住ls(因为strace在10秒滞后期间不输出任何内容然后突然完美执行ls).所以我认为它可能来自我的shell,但是这是相同的,strace在我的bash上运行并且ls在两种情况下执行都给出了相同的strace输出:shell执行ls并等待其执行结束(strace滞后之前的最后一个输出strace)waitpid(...)).所以我想在启动ls和执行之间发生了一些错误,就好像它是一个内核级别的问题.这真的就像如果sleep是上进行ls(0 CPU使用率).

在延迟期间,我的CPU和网络活动完全正常......

请注意,新LD路径中的库不会与任何"标准库"冲突,因此ls在我的示例中它不会打扰.

因此,我对有关LD_LIBRARY_PATH副作用或如何深入调试我的示例的更深入解释感兴趣.

unix linux bash ld

7
推荐指数
1
解决办法
1101
查看次数