小编squ*_*les的帖子

CMake:在脚本中打印出所有可访问的变量

我想知道是否有办法在CMake中打印出所有可访问的变量.我对CMake变量不感兴趣 - 就像在--help-variables选项中一样.我在谈论我定义的变量,或者包含脚本定义的变量.

我现在包括

INCLUDE (${CMAKE_ROOT}/Modules/CMakeBackwardCompatibilityCXX.cmake)
Run Code Online (Sandbox Code Playgroud)

而且我希望我能打印出这里的所有变量,而不是必须浏览所有文件并阅读可用的内容 - 我可能会发现一些我不知道的变量可能有用.帮助学习和发现会很好.它严格用于调试/开发.

这类似于打印Lua中当前作用域可访问的所有局部变量中的问题,但对于CMake!

有没有人这样做过?

cmake

199
推荐指数
4
解决办法
12万
查看次数

在CMake中使用GLOB或每个文件单独指定源文件是否更好?

CMake提供了几种指定目标源文件的方法.一种是使用globbing(文档),例如:

FILE(GLOB MY_SRCS dir/*)
Run Code Online (Sandbox Code Playgroud)

另一个是单独指定每个文件.

哪种方式更喜欢?Globbing似乎很容易,但我听说它有一些缺点.

cmake

145
推荐指数
4
解决办法
7万
查看次数

CMake输出/构建目录

我对cmake很新,并阅读了一些关于如何使用它的教程,并编写了一些复杂的50行CMake脚本,以便为3个不同的编译器制作程序.这可能总结了我在cmake的所有知识.

现在我的问题是我有一些源代码,当我制作程序时,我不想触摸/弄乱它的文件夹.我想要所有cmake并使输出文件和文件夹进入../Compile/,所以我在我的cmake脚本中更改了一些变量,并且它在我的笔记本电脑上做了类似的事情时工作了一段时间:

Compile$ cmake ../src
Compile$ make
Run Code Online (Sandbox Code Playgroud)

在那里,我现在在文件夹中有一个干净的输出,这正是我正在寻找的.

现在我转移到另一台计算机,并重新编译CMake 2.8.11.2,我几乎回到原点!它总是将事物编译到我的CMakeLists.txt所在的src文件夹中.

我在cmake脚本中选择目录的部分是:

set(dir ${CMAKE_CURRENT_SOURCE_DIR}/../Compile/)
set(EXECUTABLE_OUTPUT_PATH ${dir} CACHE PATH "Build directory" FORCE)
set(LIBRARY_OUTPUT_PATH ${dir} CACHE PATH "Build directory" FORCE)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${dir})
set(CMAKE_BUILD_FILES_DIRECTORY ${dir})
set(CMAKE_BUILD_DIRECTORY ${dir})
set(CMAKE_BINARY_DIR  ${dir})
SET(EXECUTABLE_OUTPUT_PATH ${dir})
SET(LIBRARY_OUTPUT_PATH ${dir}lib)
SET(CMAKE_CACHEFILE_DIR ${dir})
Run Code Online (Sandbox Code Playgroud)

现在它始终以:

-- Build files have been written to: /.../src
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?

c++ makefile build cmake output

98
推荐指数
5
解决办法
19万
查看次数

Cmake找不到Boost

我正在尝试使用CMake配置项目,但即使它们位于指定的文件夹中,也无法找到Boost库.我已经指定了Boost_INCLUDE_DIR,Boost_LIBRARYDIR和BOOST_ROOT,但是我仍然收到错误,说CMake无法找到Boost.这种错误的原因是什么?

boost cmake

76
推荐指数
6
解决办法
14万
查看次数

矢量擦除迭代器

我有这个代码:

int main()
{
    vector<int> res;
    res.push_back(1);
    vector<int>::iterator it = res.begin();
    for( ; it != res.end(); it++)
    {
        it = res.erase(it);
        //if(it == res.end())
        //  return 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

"一个随机访问迭代器,指向函数调用擦除的最后一个元素之后的元素的新位置,如果操作擦除了序列中的最后一个元素,则为向量结束."

此代码崩溃,但如果我使用if(it == res.end())然后返回它的工作原理.怎么会?for循环是否兑现了res.end(),因此不相等的运算符失败了?

c++ iterator vector

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

std :: vector.clear()是否在每个元素上删除(空闲内存)?

考虑以下代码:

#include <vector>

void Example()
{
    std::vector<TCHAR*> list;
    TCHAR* pLine = new TCHAR[20];
    list.push_back(pLine);
    list.clear();    // is delete called here?
    // is delete pLine; necessary?
}
Run Code Online (Sandbox Code Playgroud)

list.clear()是否在每个元素上调用delete?即我必须在list.clear()之前/之后释放内存吗?

c++ std

59
推荐指数
5
解决办法
8万
查看次数

CMake target_link_libraries接口依赖项

我是CMAKE的新手,对与target_link_libraries相关的PUBLIC,PRIVATE和INTERFACE关键字感到困惑.文档提到它们可用于在一个命令中指定链接依赖关系和链接接口.

链接依赖关系和链接接口实际上意味着什么?

cmake

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

如何安装自定义CMake-Find模块

我使用CMake和CPack配置和打包我的库.我已经编写了自己的find-module FindMyLib.cmake.

如何告诉CMake/CPack将此文件添加到CMake模块目录中,以便将来的开发人员可以简单地指定FIND_PACKAGE(MyLib)来使用我的库?

cmake cpack

52
推荐指数
3
解决办法
6万
查看次数

SQL - 如何在列中找到最高数字?

假设我在Customers表中有以下数据:(仅此而已)

ID   FirstName   LastName
-------------------------------
20   John        Mackenzie
21   Ted         Green
22   Marcy       Nate
Run Code Online (Sandbox Code Playgroud)

什么类型的SELECT语句可以在ID列中获取数字22?

我需要做这样的事情来生成一个唯一的ID.当然我可以通过自动增量让系统执行此操作,但是我如何获得自动生成的ID?

我想到了"从客户中选择ID"并计算返回的行,但这看起来非常无效,在这种情况下,它会错误地返回"3",尽管我需要23的唯一ID.

mysql sql sql-server

46
推荐指数
7
解决办法
14万
查看次数

通过引用传递C++迭代器有什么问题?

我用这样的原型编写了一些函数:

template <typename input_iterator>
int parse_integer(input_iterator &begin, input_iterator end);
Run Code Online (Sandbox Code Playgroud)

这个想法是调用者将提供一系列字符,并且该函数会将字符解释为整数值并将其返回,从最后使用的字符开始.例如:

std::string sample_text("123 foo bar");
std::string::const_iterator p(sample_text.begin());
std::string::const_iterator end(sample_text.end());
int i = parse_integer(p, end);
Run Code Online (Sandbox Code Playgroud)

这将begin设置为123并i"指向"之前的空间p.

我被告知(没有解释)通过引用传递迭代器是不好的形式.这是不好的形式?如果是这样,为什么?

c++ iterator pass-by-reference

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

标签 统计

cmake ×6

c++ ×4

iterator ×2

boost ×1

build ×1

cpack ×1

makefile ×1

mysql ×1

output ×1

pass-by-reference ×1

sql ×1

sql-server ×1

std ×1

vector ×1