Ответ 1
A (немасштабируемое и непереносимое) решение создает пользовательскую команду с измененными флагами. Минимальным примером, который я получил, является следующее:
cmake_minimum_required(VERSION 2.8)
project(test)
# Some flags
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O2 -Wall")
# Remove unwanted flag
string(REPLACE "-Wall" "" CUSTOM_FLAGS ${CMAKE_CXX_FLAGS})
# Split the flags into a cmake list (; separated)
separate_arguments(CUSTOM_FLAGS UNIX_COMMAND ${CUSTOM_FLAGS})
# Custom command to build your one file.
add_custom_command(
OUTPUT out.o
COMMAND ${CMAKE_CXX_COMPILER}
ARGS ${CUSTOM_FLAGS} -c ${CMAKE_SOURCE_DIR}/out.cpp
-o ${CMAKE_BINARY_DIR}/out.o
MAIN_DEPENDENCY out.cpp)
add_executable(test test.cpp out.o)
Пока он не идеален, он работает, и это важно. separate_arguments
был необходим, потому что в противном случае все пробелы в CUSTOM_FLAGS
были экранированы (не знаю, как быстро решить эту проблему).