在GCC编译的项目中,
如何为每个目标类型(调试/发布)运行CMake ? 我如何使用CMake指定调试和释放C/ c++标志? 我如何表达,主要可执行文件将编译与g++和一个嵌套库与gcc?
在GCC编译的项目中,
如何为每个目标类型(调试/发布)运行CMake ? 我如何使用CMake指定调试和释放C/ c++标志? 我如何表达,主要可执行文件将编译与g++和一个嵌套库与gcc?
当前回答
关于调试/发布标志,请参阅CMAKE_BUILD_TYPE变量(将其传递为cmake -DCMAKE_BUILD_TYPE=value)。它的值包括发布、调试等。
https://gitlab.kitware.com/cmake/community/wikis/doc/cmake/Useful-Variables#compilers-and-tools
Cmake使用扩展名来选择编译器,所以只需将文件命名为.c即可。
你可以用不同的设置覆盖它:
例如:
set_source_files_properties(yourfile.c LANGUAGE CXX)
会用g++编译.c文件。上面的链接还展示了如何为C/ c++选择特定的编译器。
其他回答
关于调试/发布标志,请参阅CMAKE_BUILD_TYPE变量(将其传递为cmake -DCMAKE_BUILD_TYPE=value)。它的值包括发布、调试等。
https://gitlab.kitware.com/cmake/community/wikis/doc/cmake/Useful-Variables#compilers-and-tools
Cmake使用扩展名来选择编译器,所以只需将文件命名为.c即可。
你可以用不同的设置覆盖它:
例如:
set_source_files_properties(yourfile.c LANGUAGE CXX)
会用g++编译.c文件。上面的链接还展示了如何为C/ c++选择特定的编译器。
使用CMake,通常建议进行“源外”构建。在项目的根目录中创建CMakeLists.txt。然后从项目的根源开始:
mkdir Release
cd Release
cmake -DCMAKE_BUILD_TYPE=Release ..
make
对于调试(同样从项目的根目录):
mkdir Debug
cd Debug
cmake -DCMAKE_BUILD_TYPE=Debug ..
make
发布/调试将为编译器添加适当的标志。还有RelWithDebInfo和MinSizeRel构建配置。
你可以通过指定一个工具链文件来修改/添加标记,你可以在其中添加CMAKE_<LANG>_FLAGS_<CONFIG>_INIT变量,例如:
set(CMAKE_CXX_FLAGS_DEBUG_INIT "-Wall")
set(CMAKE_CXX_FLAGS_RELEASE_INIT "-Wall")
有关更多细节,请参阅CMAKE_BUILD_TYPE。
关于你的第三个问题,我不太清楚你问的是什么问题。CMake应该自动检测并使用适合不同源文件的编译器。
// CMakeLists.txt:释放
set(CMAKE_CONFIGURATION_TYPES "Release" CACHE STRING "" FORCE)
// CMakeLists.txt:调试
set(CMAKE_CONFIGURATION_TYPES "Debug" CACHE STRING "" FORCE)
而不是直接操作CMAKE_CXX_FLAGS字符串(可以使用string(APPEND CMAKE_CXX_FLAGS_DEBUG " -g3") btw),你可以使用add_compile_options:
add_compile_options(
"-Wall" "-Wpedantic" "-Wextra" "-fexceptions"
"$<$<CONFIG:DEBUG>:-O0;-g3;-ggdb>"
)
这将向所有构建类型添加指定的警告,但只向DEBUG构建添加给定的调试标志。请注意,编译选项存储为CMake列表,它只是一个用分号分隔元素的字符串。
如果你想建立一个不同的配置而不重新生成如果使用,你也可以运行cmake——build {$PWD}——config <cfg>对于多配置工具,选择<cfg> ex. Debug, Release, MinSizeRel, RelWithDebInfo
https://cmake.org/cmake/help/v2.8.11/cmake.html#opt%3a--builddir