我有一个makefile,它在命令行中获取选项
make OPTION_1=1
Run Code Online (Sandbox Code Playgroud)
根据该值,它将向对象子集添加其他编译器定义.
ifeq ($(OPTION_1), 1)
CC_FLAGS += -DOPTION_1_ON
endif
Run Code Online (Sandbox Code Playgroud)
定义中的更改会影响包含的头文件内容 - 存根或实现会暴露给目标文件.
如何通过此选项更改来重建受影响的文件?
什么设置适用于GNU在Windows上进行并行作业(-j)?
我已经尝试使用MinGW make 3.81将shell设置为cmd.exe,这适用于创建多个进程但是使用"等待作业"消息失败.
这可以工作,什么是最好的设置?(MinGW/Cygwin/???)有人能指出一个可以测试的工作示例吗?
我很想知道C的替代品在嵌入式开发者世界中有多受欢迎,例如Ada ......
我只使用过C(带有一点汇编程序),但是我的目标资源非常有限.在这个空间还有什么其他的东西吗?什么赢得了机顶盒的商品?
如果!C的根本原因是什么?
谢谢.
使用Python如何通过有序子集匹配减少列表列表[[..],[..],..]
?
在此问题的上下文中,列表L是列表的子集,M
如果M
包含所有成员L
,并且顺序相同.例如,列表[1,2]是列表[1,2,3]的子集,但不是列表[2,1,3]的子集.
输入示例:
a. [[1, 2, 4, 8], [1, 2, 4, 5, 6], [1, 2, 3], [2, 3, 21], [1, 2, 3, 4], [1, 2, 3, 4, 5, 6, 7]]
b. [[2, 16, 17], [1, 2, 3, 4, 5, 6, 7], [1], [1, 2, 3, 4], [1, 2], [17, 18, 19, 22, 41, 48], [2, 3], [1, 2, 3], [50, 69], [1, 2, 3], [2, 3, 21], [1, 2, 3], …
Run Code Online (Sandbox Code Playgroud) 我想用CMake生成一个Eclipse CDT项目,其中生成的Eclipse项目包含定义的构建类型作为IDE中的可选构建配置.
例如:
if(CMAKE_CONFIGURATION_TYPES)
set(CMAKE_CONFIGURATION_TYPES PRODUCT_A PRODUCT_B)
set(CMAKE_CONFIGURATION_TYPES "${CMAKE_CONFIGURATION_TYPES}" CACHE STRING
"Reset the configurations to what we need"
FORCE)
endif()
SET(CMAKE_C_FLAGS_PRODUCT_A
"-DF_ENABLE_FEATURE_A -DF_ENABLE_FEATURE_B
)
SET(CMAKE_C_FLAGS_PRODUCT_B
"-DF_ENABLE_FEATURE_A
)
Run Code Online (Sandbox Code Playgroud)
使用上述方法,Visual Studio项目生成器为我提供了构建配置选择product_A product_B并正确突出显示活动代码.
但是,如果我生成Eclipse项目,那么构建配置就不存在了.
如何使这个项目适用于Eclipse项目?
一般来说,我会通过在ROM映像中放置一些独特且随机的内容并将其用作种子来加密EEPROM内容以停止提取并在图像模块之后重新编程.
一个明显的缺陷似乎是,这并没有停止以一个空白的替换EEPROM外部芯片的形式篡改...哦看起来回到第一次使用状态,让我们要求钥匙保存!
选择组件对我来说不是一个选项,硬件平台已经定义.EEPROM在器件的使用寿命期间被编程为配置和状态改变,因此断开擦除线也是不可行的.
我正在寻求关于可能的解决方案的意见,以防止假冒(第一次运行)状态的伪造,因为这将允许保存敏感数据和解锁设备的功能.
我相信分组密码(ECB模式)足以保护敏感数据,可能在顶部!这种方法连同多份副本,腌制一种而不是另一种,应该使得花钱和时间来应对这些措施在经济上是不值得的.
make
继续构建并说当我的依赖文件说对象依赖于已移动的头文件时,一切都是最新的.
如果运行make -d
以捕获评估,我看到:
Considering target file `../build/out/src/manager.o'.
Looking for an implicit rule for `../build/out/src/manager.o'.
No implicit rule found for `../build/out/src/manager.o'.
Pruning file `../product/build/config/product.conf'.
Pruning file `../build/out/opt_cc.txt'.
Considering target file `../mem/src/manager.c'.
Looking for an implicit rule for `../mem/src/manager.c'.
No implicit rule found for `../mem/src/manager.c'.
Finished prerequisites of target file `../mem/src/manager.c'.
No need to remake target `../mem/src/manager.c'.
Pruning file `../mem/mem.h'.
Finished prerequisites of target file `../build/out/src/manager.o'.
Prerequisite `../product/build/config/product.conf' is older than target `../build/out/src/manager.o'.
Prerequisite `../build/out/opt_cc.txt' is older than target …
Run Code Online (Sandbox Code Playgroud) 在C中,一个函数可以向一个函数公开内存,它在较低级别"管理"为只调用那些调用该函数的人(暴露其地址).return * const
没有效果,但我想知道我是否忽略了编程勾号?
谢谢.
const uint8_t * get_value(int index)
{
static uint8_t data[2] = {0, 0};
return (const uint8_t *)&data[index];
}
int main(void)
{
uint8_t * value;
value = get_value(1);
*value += 1;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
@j_random_hacker对我的问题提出了一个很好的妥协建议,它提供了我正在寻找的额外障碍,以防止随意误用该数据.
typedef struct
{
const uint8_t * value;
const uint8_t size;
} readonly_t;
readonly_t get_value(int index, int size)
{
static uint8_t data[2] = {0, 0};
uint8_t rsize;
/* ... validate index, size params */
readonly_t r = { &data[index], rsize }; …
Run Code Online (Sandbox Code Playgroud) (过度依赖IDE的情况)
我有一些遗留的C代码,我编译为C++,用于单元测试.C源是C++知道的,因为它有条件地基于环境定义.
例如(PRIVATE
做出决定static
):
#if!defined __cplusplus
#define PRIVATE1 PRIVATE
#endif
Run Code Online (Sandbox Code Playgroud)
...
PRIVATE1 const int some_var;
Run Code Online (Sandbox Code Playgroud)
问题是我似乎无法找出PRIVATE1
解决问题或在C++中解决的问题,如果我添加一个声明但是没有指明在哪里,编译器会抱怨重新定义?
我搜索了我的MinGW/gcc包含路径,C++ ISO规范和我可用的C++书籍都无济于事.
编辑:
当然,我在发布之前检查了命令行和makefile.