如何在不更改 CMakeLists.txt 的情况下将 CFLAGS 和 CXXFLAGS 传递给 cmake(也许通过 CLI?)
how can I pass CFLAGS and CXXFLAGS to cmake without altering the CMakeLists.txt (through CLI perhaps?)
我无法更改我从事的项目的 CMakeLists.txt,并且其中使用的 cmake 工具链文件仅声明要发布的 C 和 CXX FLAGS。
所以为了调试我需要强制我自己的标志(即将 -O0 -DDEBUG 附加到 CFLAGS 和 CXXFLAGS)。
所以我尝试使用以下示例通过 cli
main.cpp:
#include <iostream>
int main(int argc, char * argv[])
{
std::cout << "hello world\n";
return 0;
}
CMakeLists.txt:
cmake_minimum_required(VERSION 3.1)
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
#prescon settings
project(cmakecflags)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CXX_EXTENSIONS NO)
enable_testing()
add_executable(cmakecflagsapp
main.cpp
)
message(CFLAGS=${CFLAGS})
message(CXXFLAGS=${CXXFLAGS})
正在调用 cmake:
CFLAGS=' -O0 -DDEBUG ' CXXFLAGS=' -O0 -DDEBUG ' cmake -G 'Unix Makefiles' -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_BUILD_TYPE=Debug .
如预期的结果使 2 个变量为空
-- The C compiler identification is GNU 7.4.0
-- The CXX compiler identification is GNU 7.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
CFLAGS=
CXXFLAGS=
-- Configuring done
-- Generating done
我想知道。
我尝试使用 cmake“--trace”查看正在执行的操作,但我找不到相关部分,其中 cmake 将从同名环境变量初始化其变量。
我可以使用另一个变量吗?也许是另一种方式?
您可以使用 -DCMAKE_CXX_FLAGS="-O0 -DDEBUG"
设置标志
如:
cmake -DCMAKE_CXX_FLAGS=CFLAGS="-O0 -DDEBUG " -DCMAKE_C_FLAGS="-O0 -DDEBUG " -G 'Unix Makefiles' -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_BUILD_TYPE=Debug .
我无法更改我从事的项目的 CMakeLists.txt,并且其中使用的 cmake 工具链文件仅声明要发布的 C 和 CXX FLAGS。
所以为了调试我需要强制我自己的标志(即将 -O0 -DDEBUG 附加到 CFLAGS 和 CXXFLAGS)。
所以我尝试使用以下示例通过 cli
main.cpp:
#include <iostream>
int main(int argc, char * argv[])
{
std::cout << "hello world\n";
return 0;
}
CMakeLists.txt:
cmake_minimum_required(VERSION 3.1)
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
#prescon settings
project(cmakecflags)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CXX_EXTENSIONS NO)
enable_testing()
add_executable(cmakecflagsapp
main.cpp
)
message(CFLAGS=${CFLAGS})
message(CXXFLAGS=${CXXFLAGS})
正在调用 cmake:
CFLAGS=' -O0 -DDEBUG ' CXXFLAGS=' -O0 -DDEBUG ' cmake -G 'Unix Makefiles' -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_BUILD_TYPE=Debug .
如预期的结果使 2 个变量为空
-- The C compiler identification is GNU 7.4.0
-- The CXX compiler identification is GNU 7.4.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
CFLAGS=
CXXFLAGS=
-- Configuring done
-- Generating done
我想知道。
我尝试使用 cmake“--trace”查看正在执行的操作,但我找不到相关部分,其中 cmake 将从同名环境变量初始化其变量。
我可以使用另一个变量吗?也许是另一种方式?
您可以使用 -DCMAKE_CXX_FLAGS="-O0 -DDEBUG"
设置标志
如:
cmake -DCMAKE_CXX_FLAGS=CFLAGS="-O0 -DDEBUG " -DCMAKE_C_FLAGS="-O0 -DDEBUG " -G 'Unix Makefiles' -DCMAKE_VERBOSE_MAKEFILE=ON -DCMAKE_BUILD_TYPE=Debug .