小编par*_*ish的帖子

为什么在CMake中将头文件添加到ADD_LIBRARY/ADD_EXECUTABLE命令中

我有一个项目,它使用CMake作为构建工具,并为我和我的同事制作了一个简单的模板.当我在网上搜索最好和易于使用的实践时,我遇到了制作图书馆的不同方法.

在这个模板中,我已经在两个单独的变量中列出了头文件和源文件,而我没有将头文件传递给add_library命令 - 只是源代码.然后我用set_target_propertiesPUBLIC_HEADER变量给头文件列表.

到目前为止它似乎有效,但我想知道我是否正在制造不必要的复杂事物.有些人在线也给add_library命令提供头文件,甚至不使用set_target_properties等等.

简而言之:

  • 我们应该包括头文件add_library还是不应该(作为最佳实践)?以及两种用法的影响.
  • 通过在add_library/add_executable中添加标题来实现目的是什么?因为即使没有它它们似乎也在工作(似乎只有前向声明和符号).请在理解上确认.

(这是我正在谈论的模板:)

cmake_minimum_required(VERSION 3.1.0)

project(lae CXX C) 
set(CMAKE_CXX_STANDARD 14)

include_directories(
  ${CMAKE_CURRENT_SOURCE_DIR}
)

set(SOURCE_FILES
    ...
)

set(HEADER_FILES 
   ...
)

set( PRIVATE_HEADER_FILES
   ...
)

add_library(${PROJECT_NAME} SHARED ${SOURCE_FILES} ) 

set( REQUIRED_LIBRARIES
   ...
)

target_link_libraries(${PROJECT_NAME} ${REQUIRED_LIBRARIES} )

SET_TARGET_PROPERTIES( 
  ${PROJECT_NAME}  
PROPERTIES 
  FRAMEWORK ON
  SOVERSION 0
  VERSION 0.1.0
  PUBLIC_HEADER "${HEADER_FILES}"
  PRIVATE_HEADER "${PRIVATE_HEADER_FILES}"
  ARCHIVE_OUTPUT_DIRECTORY "lib"
  LIBRARY_OUTPUT_DIRECTORY "lib"
  OUTPUT_NAME ${PROJECT_NAME}
)
Run Code Online (Sandbox Code Playgroud)

cmake

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

非托管内存和托管内存

究竟是什么un-managedmanaged memory?任何人都能简单解释一下吗?

此外,当托管内存概念被用于RAM,调用托管RAM时,究竟意味着什么.有关"托管RAM"和"非托管RAM"的具体细节是什么?

memory ram unmanaged managed

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

如何在 yocto 构建系统中使用“构建历史”?

我想跟踪使用 yocto-build-system 创建的“构建”。经过一番搜索,了解到 yocto-project 提供的“buildhistory”功能。

他们说,为了启用“构建历史”,我们需要执行以下操作:

编辑 .../build/conf/local.conf 并添加:

INHERIT += "buildhistory"
BUILDHISTORY_COMMIT = "1"
Run Code Online (Sandbox Code Playgroud)

然后重新运行“bitbake”以初始化 buildhistory 目录。

我做了同样的事情,但我无法找到 buildhistory 目录。

任何人都可以让我知道,如何使用这个“构建历史”,以及如何查看构建差异?

yocto

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

序列图:线程处理队列中的消息

从序列图符号可以理解,同步调用异步调用分别具有“实线实头”和“实线细头”。

考虑这种情况:

  1. 一些通知,确实在队列中添加了一条消息(现在这个异步线程在这里死掉了)。
  2. 队列已经有一个处理器线程,它检查队列空状态,并一个接一个地继续处理队列中的消息(该线程正在循环检查queue.empty()) ,处理消息

现在,人们关心的是;

  1. 对于第一点,如何在序列图上将“平台通知”表示为一个事件?[到目前为止,我一直在使用“虚线”和“事件名称”,但从 UML 细节中读取,“虚线”通常用于返回]
  2. 对于第二点,如何显示与第一个线程不同的“处理器线程操作”?。因为,队列中消息处理的顺序并不是按照消息加入队列的顺序触发的(而是异步执行的)。

c++ multithreading uml asynchronous sequence-diagram

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

结构中的"new/delete"代替"malloc/free"在C++中有多好?

很多次,我在C++代码指针中看到了结构的分配;

struct Current{
int amp;
};

Current *cur = new Current();
Run Code Online (Sandbox Code Playgroud)

但是,"Current"是一个结构而不是类,但在C++中受支持.如何使用它来代替C类型分配,如下所示:

Current *cur = (Current*) malloc (sizeof(Current));
Run Code Online (Sandbox Code Playgroud)

这背后的基本概念是什么?我所知道的是,"结构"在C++中被认为是"类".

已知C++中struct-VS-class的概念.查询主要是关于具体的用例,因为两者都是允许的,但是应该优先考虑,为什么?

c++ struct class

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