相关疑难解决方法(0)

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

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

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

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

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

cmake

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

为什么cmake文件GLOB邪恶?

CMake文档说明命令文件GLOB:

我们不建议使用GLOB从源树中收集源文件列表.如果在添加或删除源时没有更改CMakeLists.txt文件,则生成的构建系统无法知道何时请求CMake重新生成.

网络中的几个讨论线程第二个是通配源文件是邪恶的.

但是,为了使构建系统知道已添加或删除了一个源,这就足够了

touch CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)

对?

然后,这比编辑CMakeLists.txt插入或删除源文件名更省力.也难以记住.所以我认为没有任何充分理由提出反对意见file GLOB.

这个论点有什么问题?

glob cmake

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

如何使用CMake收集源文件而不使用globbing?

CMake的文件明确指出,file(GLOB ...)不建议收集源文件的生成,但它没有提什么建议的方法实际上是.

手动指定每个源文件听起来对我来说太过手动了.那么,收集源文件的正确方法是什么,如果没有 file(GLOB ...)

build cmake

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

什么时候应该重新运行cmake?

在运行cmake命令一次以生成构建系统之后,是否应该重新运行cmake命令?

生成的构建系统可以检测相关CMakeLists.txt文件中的更改并相应地执行操作.您可以在生成的Makefile中看到这样做的逻辑.成功何时成功的确切规则对我来说是神秘的.

我应该什么时候重新开始cmake?答案取决于使用的发电机吗?

这篇博客文章(在标题下:"多次调用CMake")指出了对这个问题的困惑,并指出答案实际上是"从不",无论发生器如何,但我发现这令人惊讶.这是真的吗?

cmake

23
推荐指数
1
解决办法
8241
查看次数

用Cmake编译一个boost测试

我正在尝试通过让cmake为我编译它来简化大型项目,但是我在编译boost单元测试时遇到了问题.我的简单示例的cmake文件如下所示.

cmake_minimum_required(VERSION 2.8)
find_package(Boost COMPONENTS system filesystem REQUIRED)
add_excecutable(testTheTester boostTester.cpp)
target_link_libraries(testTheTester ${Boost_FILESYSTEM_LIBRARY} ${Boost_SYSTEM_LIBRARY})
add_test(tester tester)
Run Code Online (Sandbox Code Playgroud)

而boostTester.cpp中的代码是:

#define BOOST_TEST_MAIN
#if !defined( WIN32 )
    #define BOOST_TEST_DYN_LINK
#endif
#include <boost/test/unit_test.hpp>

BOOST_AUTO_TEST_CASE( la ) {
    BOOST_CHECK_EQUAL(1, 1)
}
Run Code Online (Sandbox Code Playgroud)

现在这个cpp代码将编译并运行正常,如果我手动构建它:

g++ boostTester.cpp -o output -lboost_unit_test_framework
Run Code Online (Sandbox Code Playgroud)

并且cmake工作正常,但是当使用输出make文件时,make崩溃时会出现大量错误,其中第一个是:

undefined referance to 'boost::unit_test::unit_test_log_t::set_checkpoint(boost... bla bla
Run Code Online (Sandbox Code Playgroud)

现在我最初的想法是cmake没有正确链接boost库,我尝试了许多命令和组合,没有运气.有谁知道如何在cmake文件中链接boost_unit_test?

c++ boost cmake

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

在Clion设置Boost

如何Boost在Clion中使用MinGW库?我已下载并解压缩boost_1_60_0.zipC:\boost_1_60_0.我现在该怎么办?我必须安装一些东西吗?这是我的CMakeLists.txt:

cmake_minimum_required(VERSION 3.3)
project(server_client)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -s -O3")
set(CMAKE_EXE_LINKER_FLAGS -static)

set(BOOST_ROOT "C:/boost_1_60_0")
set(BOOSTROOT "C:/boost_1_60_0")
find_package(Boost 1.60.0)
if(NOT Boost_FOUND)
    message(FATAL_ERROR "Could not find boost!")
endif()

set(SOURCE_FILES chat_server.cpp)
add_executable(server_client ${SOURCE_FILES})
Run Code Online (Sandbox Code Playgroud)

找不到Boost:

1

c++ boost mingw clion

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

标签 统计

cmake ×5

boost ×2

c++ ×2

build ×1

clion ×1

glob ×1

mingw ×1