Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 自定义命令中的Cmake(<;3.6)编译器标志_C++_Cmake - Fatal编程技术网

C++ 自定义命令中的Cmake(<;3.6)编译器标志

C++ 自定义命令中的Cmake(<;3.6)编译器标志,c++,cmake,C++,Cmake,假设我有一组编译器标志,我有两个目标 set(编译标志“-a-b-c”) 添加可执行文件(exe main.cpp) 设置\u目标\u属性(exe属性编译\u标志${COMPILE\u标志}) 添加自定义目标(target1依赖exe) 添加自定义目标(目标2取决于exe2) 单独的参数(编译标志) 添加自定义命令(输出${DEVICE\u OBJ\u FILE} 命令${CMAKE\u CXX\u COMPILER}${COMPILE\u FLAGS}${OTHER\u FLAGS}main.

假设我有一组编译器标志,我有两个目标

set(编译标志“-a-b-c”)
添加可执行文件(exe main.cpp)
设置\u目标\u属性(exe属性编译\u标志${COMPILE\u标志})
添加自定义目标(target1依赖exe)
添加自定义目标(目标2取决于exe2)
单独的参数(编译标志)
添加自定义命令(输出${DEVICE\u OBJ\u FILE}
命令${CMAKE\u CXX\u COMPILER}${COMPILE\u FLAGS}${OTHER\u FLAGS}main.cpp-o exe2
(来源:cpp)
有没有办法避免调用“单独的参数”


我宁愿将标志设置为分号分隔的列表和COMPILE_选项,而不是COMPILE_标志,但我们可以访问的最新cmake是3.6,它至少可以追溯到cmake 3.0,并且可能是设置此类标志的首选方法。它需要一个列表

CMakeLists.txt
(注意:我使用了
-D???
作为标志。通常情况下,应该将其用于定义。)

main.cpp
(exe输出
和为3
,而exe2输出
和为5

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[]) {
    int sum = 0;
#ifdef AYE 
    sum++;
#endif
#ifdef BEE 
    sum++;
#endif
#ifdef SEE 
    sum++;
#endif
#ifdef DEE 
    sum++;
#endif
#ifdef EEE 
    sum++;
#endif
    printf("The sum is %d\n", sum);
}
#包括
#包括
#包括
int main(int argc,char*argv[]){
整数和=0;
#是的
sum++;
#恩迪夫
#ifdef蜜蜂
sum++;
#恩迪夫
#ifdef见
sum++;
#恩迪夫
#伊夫迪
sum++;
#恩迪夫
#ifdef EEE
sum++;
#恩迪夫
printf(“总和为%d\n”,总和);
}

“我宁愿将标志设置为分号分隔的列表”-是的,这是一种正确的方法。使用command代替只对单值属性起作用的
设置目标属性
。为什么要手动执行编译器?如果只想执行编译器,那么为什么要使用cmake,它只会碍事?但为什么不改为使用cmake,并添加可执行文件(target2 source.cpp),手动编译有什么意义?@KamilCuk我正在使用非标准编译器(DPCPP+)对于target2,我实际上正在生成一份报告。如果我使用add_可执行文件,cmake似乎完成了编译和链接步骤,而不是我想要的。然后我建议编写特定于编译器的配置文件,而不是一直编写
add_custom_命令。
。有些东西。实际上并不需要那么长时间。但官方DPCPP上的自述文件似乎建议只使用铿锵语法。CMake<3.6下的target\u link\u选项会有类似的东西吗?我看到它是在3.13中引入的。在
taget\u link\u options
之前,人们使用
target\u link\u库
@KamilCuk谢谢!尽管我需要使用/EHsc windows特定的标志作为链接标志,这是目标链接库将在…上出错。请尝试
set(CMAKE\u EXE\u LINKER\u FLAGS“${CMAKE\u EXE\u LINKER\u FLAGS}/EHsc”)
但这是全局性的。对于特定于目标的,我更愿意建议更新CMAKE-它仍然是一个有许多位更改的活动项目。但实际上,
target\u link\u库(…-EHsc)
应该可以工作,您尝试过吗?(不是
/
而是
-
)太棒了,它能用!非常感谢!
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char *argv[]) {
    int sum = 0;
#ifdef AYE 
    sum++;
#endif
#ifdef BEE 
    sum++;
#endif
#ifdef SEE 
    sum++;
#endif
#ifdef DEE 
    sum++;
#endif
#ifdef EEE 
    sum++;
#endif
    printf("The sum is %d\n", sum);
}