답변:
오랫동안 CMake는 add_definitions
이러한 목적으로 명령을 받았습니다. 그러나 최근이 명령은보다 세분화 된 접근 방식 (컴파일 정의에 대한 별도의 명령, 디렉토리 및 컴파일러 옵션 포함)으로 대체되었습니다.
새로운 add_compile_definitions 사용 예 :
add_compile_definitions(OPENCV_VERSION=${OpenCV_VERSION})
add_compile_definitions(WITH_OPENCV2)
또는:
add_compile_definitions(OPENCV_VERSION=${OpenCV_VERSION} WITH_OPENCV2)
이것에 대한 좋은 부분은 CMake가 가지고있는 초라한 속임수를 우회한다는 것입니다. add_definitions
. CMake는 초라한 시스템이지만 마침내 정신을 잃고 있습니다.
컴파일러 플래그에 사용할 명령에 대한 자세한 설명은 https://cmake.org/cmake/help/latest/command/add_definitions.html을 참조 하십시오.
마찬가지로 Jim Hunziker의 답변에 설명 된대로 대상별로이 작업을 수행 할 수 있습니다.
add_compile_definitions
던집니다 CMake Error at CMakeLists.txt:6 (add_compile_definitions): Unknown CMake command "add_compile_definitions".
. add_compile_options(-D <your-def>)
대신 사용해야 했다.
cmake -D CMAKE_CXXFLAGS='-DDEBUG_CHESSBOARD'
(테스트되지 않음)
https://cmake.org/cmake/help/v3.17/command/add_compile_definitions.html#command:add_compile_definitions
페이지가 사라질 때까지 버전 번호를 변경하십시오. 그것은 아직 존재하지 않는 버전입니다. 다음 단계에서는 Whats new
섹션으로 이동하여 새 명령 또는 기능을 찾을 수 있습니다. 그렇게 어렵지 않습니다.
특정 대상에 대해이를 수행하려면 다음을 수행하십시오.
target_compile_definitions(my_target PRIVATE FOO=1 BAR=1)
빌드중인 대상이 둘 이상 있고 모두 동일한 플래그를 사용하지 않으려면이 작업을 수행해야합니다. target_compile_definitions 에 대한 공식 문서도 참조하십시오 .
target_compile_definitions(my_target PRIVATE FOO=1)
다른가 set_source_files_properties(foo.cpp PROPERTIES COMPILE_DEFINITIONS -DFOO=1)
?
target_compile_definitions
WHOLE 실행 파일 / 라이브러리의 값을 설정합니다. 여기서 'set_source_files_properties`는 지정된 파일의 값만 설정합니다. Latter 명령을 사용하면 파일을 다른 언어로 컴파일 할 수 있습니다. 즉 : set_source_files_properties(compile_me_as_objc.c PROPERTIES -x objective-c
. 참고 것을 -x objective-c
여기 GCC / 연타에 플래그 고유의 것입니다.
이 페이지에서 제안 된 다른 솔루션은 일부 버전의 Cmake <
3.3.2
유용합니다 . 여기에 내가 사용중인 버전에 대한 해결책 (즉,3.3.2
)이 있습니다. 사용하여 Cmake의 버전을 확인하고$ cmake --version
필요에 맞는 솔루션을 선택하십시오. cmake 문서는 공식 페이지에서 볼 수 있습니다.
CMake 버전 3.3.2에서는
#define foo
나는 사용해야했다 :
add_definitions(-Dfoo) # <--------HERE THE NEW CMAKE LINE inside CMakeLists.txt
add_executable( ....)
target_link_libraries(....)
그리고 이와 같은 전 처리기 매크로 정의를 가지려면 :
#define foo=5
줄이 그렇게 수정되었습니다.
add_definitions(-Dfoo=5) # <--------HERE THE NEW CMAKE LINE inside CMakeLists.txt
add_executable( ....)
target_link_libraries(....)
add_definitions()
또는 을 사용해야 target_compile_definitions()
합니다. add_compile_definitions()
CMake 3.12까지 최신 명령 이 추가되지 않았습니다. @ Leos313