gpt4 book ai didi

c++ - 将CMakeLists.txt与带有不同标志的多个目标一起使用

转载 作者:行者123 更新时间:2023-12-02 10:10:35 24 4
gpt4 key购买 nike

我正在尝试使用CMakeLists.txt将以下文件编译为两个不同的可执行文件。
该文件是:main.cpp

#include <iostream>
#include <cassert>

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

这是 CMakeLists.txt文件
cmake_minimum_required(VERSION 3.0.0)
project(multi_Tar VERSION 0.1.0)


SET(CMAKE_CXX_FLAGS "-O3 -DNDEBUG")
SET(CMAKE_CXX_FLAGS_RELEASE "-O0")
add_executable(multi_Tar main.cpp)

add_executable(tests main.cpp)
set_target_properties(tests PROPERTIES COMPILE_FLAGS "${CMAKE_CXX_FLAGS_RELEASE}")

此解决方案不起作用。当我运行 ./tests时,没有出现断言错误。

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

谢谢您的帮助。
在@squareskittles答案后编辑:
谢谢你的回答!
(包括答案​​的代码:)
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_definitions(multi_Tar PRIVATE -O3 -DNDEBUG)

add_executable(tests main.cpp)
# Add the compile options for tests.
target_compile_definitions(multi_Tar PRIVATE -O0)
我尝试使用您的解决方案,但出现以下错误:
<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
我尝试稍微更改 CMakeLists.txt,但没有设法使其生效。
另外,解决方案的最后一行应该是:
target_compile_definitions(multi_Tar PRIVATE -O0)
要么
target_compile_definitions(tests PRIVATE -O0)

最佳答案

基于CMake代码,tests可执行文件应该而不是产生断言错误。您添加了NDEBUG编译定义,根据 assert 文档,该定义禁用了assert宏。
如果要将编译标志应用于特定的CMake目标,则应使用特定于目标的CMake命令,例如 target_compile_options target_compile_definitions 。我不确定您在哪里找到此CMake代码,但是不建议手动修改CMAKE_CXX_FLAGS*变量,通常不需要这样做,尤其是在较新版本的CMake中。
尝试执行以下操作,将NDEBUG标志应用于multi_Tar目标:

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)

关于c++ - 将CMakeLists.txt与带有不同标志的多个目标一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63764779/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com