不同目标中相同文件的不同编译标志

Phi*_*ipp 18 cmake

我想在两个不同的目标中包含一个.cpp文件(在运行CMake后成为两个VS项目).我想为这些项目设置不同的COMPILE_FLAGS.

但是,当我这样做的时候

SET_TARGET_PROPERTIES(myfile.cpp PROPERTIES COMPILE_FLAGS "flags1")
ADD_EXECUTABLE(project1 myfile.cpp)
SET_TARGET_PROPERTIES(myfile.cpp PROPERTIES COMPILE_FLAGS "flags2")
ADD_EXECUTABLE(project2 myfile.cpp)
Run Code Online (Sandbox Code Playgroud)

"flags2"适用于这两个项目,因此看起来第3行中的属性被覆盖而第2行没有考虑.这是真的还是我错过了什么?有办法解决这个问题吗?

谢谢!

sak*_*kra 18

set_target_properties命令应用于项目而不是源文件:

add_executable(project1 myfile.cpp)
set_target_properties(project1 PROPERTIES COMPILE_FLAGS "flags1")
add_executable(project2 myfile.cpp)
set_target_properties(project2 PROPERTIES COMPILE_FLAGS "flags2")
Run Code Online (Sandbox Code Playgroud)

目标上设置的标志将应用于目标中的所有源.

  • 谢谢,但我正在设置预编译的标题选项,它们必须与precompiled.cpp和其他.cpps不同. (3认同)

Sha*_*ron 5

如果遵循每个子目录哲学的一个目标,则可以使用add_definitions以添加编译标志来执行以下操作.


# in ./CMakeLists.txt
add_subdirectory(project1)
add_subdirectory(project2)   
Run Code Online (Sandbox Code Playgroud)
# in ./project1/CMakeLists.txt:
add_definitions("flags1")
add_executable(project1 ../myfile.cpp)
Run Code Online (Sandbox Code Playgroud)
# in ./project2/CMakeLists.txt:
add_definitions("flags2")
add_executable(project2 ../myfile.cpp)
Run Code Online (Sandbox Code Playgroud)

add_definitions适用于在此子目录中编译的所有文件及其下的文件.您可以使用以下命令将标志应用于特定文件:

set_source_files_properties(myfile.cpp PROPERTIES COMPILE_FLAGS "flags")
Run Code Online (Sandbox Code Playgroud)