Yanıtlar:
Uzun bir süre, CMake add_definitions
bu amaçla komuta etti. Bununla birlikte, son zamanlarda komutun yerini daha ince taneli bir yaklaşım almıştır (derleme tanımları için ayrı komutlar, dizinleri ve derleyici seçeneklerini içerir).
Yeni add_compile_definitions kullanan bir örnek :
add_compile_definitions(OPENCV_VERSION=${OpenCV_VERSION})
add_compile_definitions(WITH_OPENCV2)
Veya:
add_compile_definitions(OPENCV_VERSION=${OpenCV_VERSION} WITH_OPENCV2)
Bu konuda iyi tarafı, CMake'in yerinde olduğu perişan hileyi atlatmasıdır add_definitions
. CMake böyle perişan bir sistem, ama sonunda bir akıl sağlığı buluyorlar.
Derleyici bayrakları için hangi komutların kullanılacağı hakkında daha fazla açıklama burada bulabilirsiniz: https://cmake.org/cmake/help/latest/command/add_definitions.html
Benzer şekilde, Jim Hunziker'in cevabında açıklandığı gibi bu hedef başına da yapabilirsiniz.
add_compile_definitions
atar CMake Error at CMakeLists.txt:6 (add_compile_definitions): Unknown CMake command "add_compile_definitions".
. add_compile_options(-D <your-def>)
Bunun yerine kullanmak zorunda kaldı .
cmake -D CMAKE_CXXFLAGS='-DDEBUG_CHESSBOARD'
(test edilmedi) boyunca bir şey ayarlayabilirsiniz
https://cmake.org/cmake/help/v3.17/command/add_compile_definitions.html#command:add_compile_definitions
ve sayfa kaybolana kadar sürüm numarasını değiştirmeye başlayabilirsiniz. Bu henüz mevcut olmayan versiyon olurdu. Bir sonraki adımda Whats new
yeni bir komut veya özellik bulmak için bölüme gidebilirsiniz . Yani o kadar zor değil.
Bunu belirli bir hedef için yapmak için aşağıdakileri yapabilirsiniz:
target_compile_definitions(my_target PRIVATE FOO=1 BAR=1)
Oluşturduğunuz birden fazla hedefiniz varsa ve hepsinin aynı bayrakları kullanmasını istemiyorsanız bunu yapmalısınız. Ayrıca target_compile_definitions ile ilgili resmi belgelere de bakın .
target_compile_definitions(my_target PRIVATE FOO=1)
farklıdır set_source_files_properties(foo.cpp PROPERTIES COMPILE_DEFINITIONS -DFOO=1)
?
target_compile_definitions
WHOLE yürütülebilir / kitaplığı için değeri ayarlar; burada 'set_source_files_properties` sadece belirtilen dosya için değeri ayarlar. İkinci komut, dosyaların farklı bir dil kullanarak derlenmesini sağlar; yani: set_source_files_properties(compile_me_as_objc.c PROPERTIES -x objective-c
. -x objective-c
Burada GCC / Clang'a özgü bir bayrak olduğunu unutmayın .
Bu sayfada önerilen diğer çözüm , Cmake <'nin bazı versiyonlarıdır
3.3.2
. Burada kullandığım sürüm için çözüm (yani3.3.2
). Kullanarak Cmake sürümünüzü kontrol edin ve$ cmake --version
ihtiyaçlarınıza uygun çözümü seçin. Cmake dokümantasyon resmi sayfasında bulunabilir.
CMake sürüm 3.3.2 ile, oluşturmak için
#define foo
Kullanmam gerekiyordu:
add_definitions(-Dfoo) # <--------HERE THE NEW CMAKE LINE inside CMakeLists.txt
add_executable( ....)
target_link_libraries(....)
ve bunun gibi bir önişlemci makro tanımına sahip olmak için:
#define foo=5
satır çok değiştirildi:
add_definitions(-Dfoo=5) # <--------HERE THE NEW CMAKE LINE inside CMakeLists.txt
add_executable( ....)
target_link_libraries(....)
add_definitions()
veya öğesini kullanmanız gerekir target_compile_definitions()
. Daha modern komut, add_compile_definitions()
CMake 3.12'ye kadar eklenmedi. @ Leos313