Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.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++ 对具有不同标志的多个目标使用CMakeLists.txt_C++_Visual Studio Code_Cmake - Fatal编程技术网

C++ 对具有不同标志的多个目标使用CMakeLists.txt

C++ 对具有不同标志的多个目标使用CMakeLists.txt,c++,visual-studio-code,cmake,C++,Visual Studio Code,Cmake,我正在尝试使用CMakeLists.txt将以下文件编译成两个不同的可执行文件 此文件为:main.cpp #include <iostream> #include <cassert> int main(int, char**) { std::cout << "Hello, world!\n"; assert(0); return 0; } 这个解决方案不起作用。当我运行/tests时,我没有得到断言错误

我正在尝试使用CMakeLists.txt将以下文件编译成两个不同的可执行文件

此文件为:
main.cpp

#include <iostream>
#include <cassert>

int main(int, char**) {
    std::cout << "Hello, world!\n";
    assert(0);
    return 0;
}


这个解决方案不起作用。当我运行
/tests
时,我没有得到断言错误


动机是使用相同的
CMakeLists.txt
测试有效性,并对相同的代码进行基准测试


谢谢你的帮助

在@squareskittles回答后编辑: 谢谢你的回答

(包括答案的代码:)

我尝试使用您的解决方案,但出现以下错误:

<command-line>: error: macro names must be identifiers
<command-line>: error: macro names must be identifiers
CMakeFiles/multi_Tar.dir/build.make:62: recipe for target 'CMakeFiles/multi_Tar.dir/main.cpp.o' failed
make[2]: *** [CMakeFiles/multi_Tar.dir/main.cpp.o] Error 1
CMakeFiles/Makefile2:104: recipe for target 'CMakeFiles/multi_Tar.dir/all' failed
make[1]: *** [CMakeFiles/multi_Tar.dir/all] Error 2
Makefile:105: recipe for target 'all' failed
make: *** [all] Error 2


基于CMake代码,
测试
可执行文件应产生断言错误。您添加了
NDEBUG
compile定义,根据文档禁用
assert

如果要将编译标志应用于特定的CMake目标,则应使用特定于目标的CMake命令,如和。我不确定您是在哪里找到此CMake代码的,但不鼓励手动修改
CMake\u CXX\u标志*
变量,而且通常是不必要的,尤其是在较新版本的CMake中

尝试类似的方法,将
NDEBUG
标志仅应用于
多目标:

cmake_minimum_required(VERSION 3.0.0)
project(multi_Tar VERSION 0.1.0)

add_executable(multi_Tar main.cpp)
# Add the compile options for multi_Tar.
target_compile_options(multi_Tar PRIVATE -O3 -DNDEBUG)

add_executable(tests main.cpp)
# Add the compile options for tests.
target_compile_options(tests PRIVATE -O0)

谢谢你的回答:)。我无法编译它,不知道为什么。@TheHolyJoker看到更新的响应,是的,最后一行应该是特定于
测试的
目标。修复了CMake代码,正确的命令应该是
target\u compile\u options
<command-line>: error: macro names must be identifiers
<command-line>: error: macro names must be identifiers
CMakeFiles/multi_Tar.dir/build.make:62: recipe for target 'CMakeFiles/multi_Tar.dir/main.cpp.o' failed
make[2]: *** [CMakeFiles/multi_Tar.dir/main.cpp.o] Error 1
CMakeFiles/Makefile2:104: recipe for target 'CMakeFiles/multi_Tar.dir/all' failed
make[1]: *** [CMakeFiles/multi_Tar.dir/all] Error 2
Makefile:105: recipe for target 'all' failed
make: *** [all] Error 2
target_compile_definitions(multi_Tar PRIVATE -O0)
target_compile_definitions(tests PRIVATE -O0)
cmake_minimum_required(VERSION 3.0.0)
project(multi_Tar VERSION 0.1.0)

add_executable(multi_Tar main.cpp)
# Add the compile options for multi_Tar.
target_compile_options(multi_Tar PRIVATE -O3 -DNDEBUG)

add_executable(tests main.cpp)
# Add the compile options for tests.
target_compile_options(tests PRIVATE -O0)