小编Rez*_*zie的帖子

使用CMake在GCC和Clang/LLVM之间切换

我有许多使用CMake构建的项目,我希望能够轻松地在使用GCC或Clang/LLVM进行编译之间进行切换.我相信(请纠正我,如果我错了!)使用Clang我需要设置以下内容:

    SET (CMAKE_C_COMPILER             "/usr/bin/clang")
    SET (CMAKE_C_FLAGS                "-Wall -std=c99")
    SET (CMAKE_C_FLAGS_DEBUG          "-g")
    SET (CMAKE_C_FLAGS_MINSIZEREL     "-Os -DNDEBUG")
    SET (CMAKE_C_FLAGS_RELEASE        "-O4 -DNDEBUG")
    SET (CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g")

    SET (CMAKE_CXX_COMPILER             "/usr/bin/clang++")
    SET (CMAKE_CXX_FLAGS                "-Wall")
    SET (CMAKE_CXX_FLAGS_DEBUG          "-g")
    SET (CMAKE_CXX_FLAGS_MINSIZEREL     "-Os -DNDEBUG")
    SET (CMAKE_CXX_FLAGS_RELEASE        "-O4 -DNDEBUG")
    SET (CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g")

    SET (CMAKE_AR      "/usr/bin/llvm-ar")
    SET (CMAKE_LINKER  "/usr/bin/llvm-ld")
    SET (CMAKE_NM      "/usr/bin/llvm-nm")
    SET (CMAKE_OBJDUMP "/usr/bin/llvm-objdump")
    SET (CMAKE_RANLIB  "/usr/bin/llvm-ranlib")
Run Code Online (Sandbox Code Playgroud)

是否有一种在这些和默认GCC变量之间切换的简单方法,最好是作为系统范围的变更而不是项目特定的(即不只是将它们添加到项目的CMakeLists.txt中)?

另外,llvm-*在使用clang而不是gcc编译时是否有必要使用程序而不是系统默认值?有什么不同?

cmake llvm clang

256
推荐指数
9
解决办法
21万
查看次数

条件SQLite检查约束?

我有一个由以下SQL定义的表:

CREATE TABLE test (
  id       integer PRIMARY KEY NOT NULL UNIQUE,
  status   text NOT NULL,
  enddate  date,
  /* Checks */
  CHECK (status IN ("Current", "Complete"))
);
Run Code Online (Sandbox Code Playgroud)

我想补充一点,需要约束enddate为非空status是"完成".

这可能吗?我使用的是SQLite v3.6.16.

sql sqlite constraints

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

使用全局命名空间限定符和指向数据成员的指针

在结构上包含全局命名空间限定符时,尝试使用指向数据成员指针时遇到编译错误.我已将代码缩减为以下内容,其工作原理如下:

namespace foo {
  using sausage = int;
  struct bar { sausage baz; };
}

auto chuckle(foo::bar barry, ::foo::sausage foo::bar::*paul) {
  return barry.*paul;
}

int main() {
  return chuckle(foo::bar{5}, &foo::bar::baz);
}
Run Code Online (Sandbox Code Playgroud)

如果我现在将全局命名空间限定符添加到bar参数中的结构chuckle:

auto chuckle(foo::bar barry, ::foo::sausage ::foo::bar::*paul) {
                                        //  ^~ added ::
  return barry.*paul;
}
Run Code Online (Sandbox Code Playgroud)

...然后它不再编译并失败并出现以下错误:

10 : <source>:10:37: error: 'foo::sausage' is not a class, namespace, or enumeration
 auto chuckle(foo::bar barry, ::foo::sausage ::foo::bar::*paul) {
                                     ^~~~~~~
10 : <source>:10:57: error: expected …
Run Code Online (Sandbox Code Playgroud)

c++ pointers

29
推荐指数
1
解决办法
1032
查看次数

从子目录中的CMakeLists.txt填充$ {SRCS}

我目前在我的项目根目录${SRCS}中的CMakeLists.txt文件中定义一个变量,列出了我的可执行文件所需的每个源文件:

SET (SRCS main.cpp
          dir1/file1.cpp
          dir1/file2.cpp
          dir2/file3.cpp
          dir2/file4.cpp)
Run Code Online (Sandbox Code Playgroud)

如何CMakeLists.txt在每个子目录中的文件中分发此列表?那是:

CMakeLists.txt
    Adds main.cpp to SRCS and subdirectories dir1 and dir2

dir1/CMakeLists.txt
    Adds file1.cpp, file2.cpp to SRCS

dir2/CMakeLists.txt
    Adds file3.cpp, file4.cpp to SRCS
Run Code Online (Sandbox Code Playgroud)

cmake

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

System.Data.SQLite参数化多个值的查询?

我试图使用参数化查询运行批量删除.目前,我有以下代码:

pendingDeletions = new SQLiteCommand(@"DELETE FROM [centres] WHERE [name] = $name", conn);

foreach (string name in selected)
    pendingDeletions.Parameters.AddWithValue("$name", name);

pendingDeletions.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)

但是,参数的值似乎每次都被覆盖,我最终只删除了最后一个中心.使用值列表执行参数化查询的正确方法是什么?

c# parameters system.data.sqlite

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

将 xs:duration 数据类型解析为 Python datetime.timedelta 对象?

根据标题,我正在尝试解析包含xs:duration数据类型的 XML 文件。我想将它转换成一个 Pythontimedelta对象,然后我可以在进一步的计算中使用它。

是否有任何内置的方法可以做到这一点,类似于该strptime()功能?如果没有,实现这一目标的最佳方法是什么?

python datetime xsd duration timedelta

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

在C++中删除未初始化的对象

可能重复:
删除NULL指针是否安全?

在我的头文件中,我声明了一个类范围内的变量:

    FaultModel<double>   *fm_req_set_odom_px;
Run Code Online (Sandbox Code Playgroud)

...在类构造函数中有条件地初始化,具体取决于配置文件的值:

    const char *configModel = ConfigReader->ReadString("FaultModel");
    if (strcmp(configModel, "cyclic") == 0)
        fm_req_set_odom_px = new CyclicFaultModel<double>();
Run Code Online (Sandbox Code Playgroud)

我的问题是:我是否需要用条件包装删除来检查模型是否已初始化,或者在任何一种情况下都可以安全删除它?

   if (fm_req_set_odom_px != NULL) // Is this necessary?
       delete fm_req_set_odom_px;
Run Code Online (Sandbox Code Playgroud)

c++ delete-operator

0
推荐指数
2
解决办法
937
查看次数

无法使用std :: string作为键迭代std :: map

我的问题几乎与这个问题相同,但那里的解决方案还没有解决我的错误.

main.h我有:

#include <map>
#include <string>

std::map<std::string, int64_t> receive_times;
Run Code Online (Sandbox Code Playgroud)

并在main.cpp:

std::map<std::string, int64_t>::const_iterator iter;
std::map<std::string, int64_t>::const_iterator eiter = receive_times.end();

for (iter = receive_times.begin(); iter < eiter; ++iter)
  printf("%s: %ld\n", iter->first.c_str(), iter->second);
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试编译时,我收到以下错误:

error: invalid operands to binary expression ('std::map<std::string, int64_t>::const_iterator' (aka '_Rb_tree_const_iterator<value_type>') and 'std::map<std::string, int64_t>::const_iterator'
  (aka '_Rb_tree_const_iterator<value_type>'))
  for (iter = receive_times.begin(); iter < eiter; ++iter)
                                     ~~~~ ^ ~~~~~
Run Code Online (Sandbox Code Playgroud)

我在顶部链接的问题中的解决方案是因为缺少了#include <string>,但显然我已将其包括在内.任何提示?

c++ iterator stdmap stdstring

0
推荐指数
1
解决办法
698
查看次数