Jak dodać parametr tylko na etapie kompilacji?

0

potrzebuje dodać dodatkowe parametry podczas tworzenia wynikowego pliku
na etapie kompilacji: -gcodeview
na etapie linkowania docelowego EXE -Wl,--pdb=

mój koncept:

if(MINGW)
      set(CMAKE_EXE_LINKER_FLAGS "-Wl,--pdb= ")
      set(CMAKE_CXX_FLAGS  "${CMAKE_CXX_FLAGS}  -gcodeview ")  
endif()

i dostaje sugestie kompilatora

[build] [14/14 100% :: 4.153] cmd.exe /C "cd . && C:\msys64\clang64\bin\clang++.exe -Wall -Wextra -pedantic-errors -g  -gcodeview  -g -Wl,--pdb= CMakeFiles/test_main.dir/test/_test_main.cpp.obj CMakeFiles/test_select_signals.dir/test/select_signals.cpp.obj -o test_select_signals.exe -Wl,--out-implib,libtest_select_signals.dll.a -Wl,--major-image-version,0,--minor-image-version,0  -ldbghelp  -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 -loleaut32 -luuid -lcomdlg32 -ladvapi32 && cd ."
[build] clang++: warning: argument unused during compilation: '-gcodeview' [-Wunused-command-line-argument]

bo parametry dodane do CMAKE_CXX_FLAGS są dodawana do wszędzie

nie potrafię znaleźć jak to poprawić aby tylko w momencie kompilowanie pliku CPP dodała się flaga -gcodeview

0

@malencki: trafiony zatopiony
co do aux_source_directory to musiał być stary przykład cmakelists, wiedza w zakrese cmake mi troche wzrosła, teraz używam aux_source_directory czasami ;)
Dziękuje !

1

Fajną praktyką jest odizolowanie tych customowych flag od reszty.
W tym celu:

  1. Tworzy się nowy target interface
  2. dodaje do niego wymagana flagi
  3. inne targety, które mają mieć te flagi linkują się do tego inreface
add_library(fooproject_compilation_flags INTERFACE)
if(MINGW)
    target_compile_options(fooproject_compilation_flags  INTERFACE "-Wl,--pdb= ")
    target_link_options(fooproject_compilation_flags  INTERFACE "${CMAKE_CXX_FLAGS}  -gcodeview ")
endif()
add_library(foolibrary)
target_link_libraries(foolibrary PRIVATE fooproject_compilation_flags)

W ten sposób, te flagi nie są globalne. Łatwo kontrolować, jakich targetów dotyczą, nie ma powtarzającego sie kodu if(KOMPILATOR) ....
Troszkę więcej pisania, ale IMHO warto.

Z tego co mi wiadomo w "modern cmake" nie zaleca się modyfikować flag kompilacji globalnie.

0

@MarekR22: dużo ciekawostek z tych filmów
np. CPM.cmake https://github.com/cpm-cmake/CPM.cmake
albo cmake-presets https://cmake.org/cmake/help/latest/manual/cmake-presets.7.html
bede musial dokladniej obejrzeć https://github.com/cpp-best-practices/cmake_template i moze pare rzeczy skopiowac do mojego cmake_template

1 użytkowników online, w tym zalogowanych: 0, gości: 1