forked from qt-creator/qt-creator
Merge remote-tracking branch 'origin/14.0'
Change-Id: I9c2a0f87c7a3da1f336a2e02c67c32ffba03efa3
This commit is contained in:
@@ -22,10 +22,12 @@
|
|||||||
Qt versions and compilers by adding the paths to them and by creating
|
Qt versions and compilers by adding the paths to them and by creating
|
||||||
\l{Kits}{kits} that use them.
|
\l{Kits}{kits} that use them.
|
||||||
|
|
||||||
To make \QC behave more like your favorite code editor or IDE,
|
To make \QC behave more like your favorite code editor or IDE, change the
|
||||||
change the preferences for keyboard shortcuts, color schemes, generic
|
preferences for generic highlighting, code snippets, and version control
|
||||||
highlighting, code snippets, and version control systems. Manage plugins
|
systems. Manage plugins to turn on and off \QC features.
|
||||||
to turn on and off \QC features.
|
|
||||||
|
To make \QC more accessible, use keyboard navigation or adjust colors and
|
||||||
|
zoom levels.
|
||||||
|
|
||||||
The following sections summarize the options that you have and point you to
|
The following sections summarize the options that you have and point you to
|
||||||
detailed information to help you specify any required settings and to make
|
detailed information to help you specify any required settings and to make
|
||||||
@@ -69,41 +71,6 @@
|
|||||||
For more information, see \l{Manage Kits}{How To: Manage Kits} and
|
For more information, see \l{Manage Kits}{How To: Manage Kits} and
|
||||||
\l{Develop for Devices}{How To: Develop for Devices}.
|
\l{Develop for Devices}{How To: Develop for Devices}.
|
||||||
|
|
||||||
\section1 Changing Keyboard Shortcuts
|
|
||||||
|
|
||||||
You can use \QC with your favorite keyboard shortcuts.
|
|
||||||
|
|
||||||
To view and edit all keyboard shortcuts defined in \QC, go to \preferences >
|
|
||||||
\uicontrol Environment > \uicontrol Keyboard. For more information, see
|
|
||||||
\l{Keyboard Shortcuts}.
|
|
||||||
|
|
||||||
\section1 Changing Color Schemes
|
|
||||||
|
|
||||||
Themes set the appearance of the \QC UI: widgets, colors, and icons.
|
|
||||||
|
|
||||||
To switch themes, go to \preferences > \uicontrol Environment >
|
|
||||||
\uicontrol Interface and select a theme in \uicontrol Theme.
|
|
||||||
|
|
||||||
Use the \QC text and code editors with your favorite color scheme that sets
|
|
||||||
highlighting of code elements and the background color. Select one of the
|
|
||||||
predefined color schemes or create custom ones. The color schemes apply to
|
|
||||||
highlighting C++ files, QML files, and generic files.
|
|
||||||
|
|
||||||
To change the color scheme, go to \preferences >
|
|
||||||
\uicontrol {Text Editor} > \uicontrol {Font & Colors}.
|
|
||||||
|
|
||||||
For more information, see \l{Change editor colors}.
|
|
||||||
|
|
||||||
\l{https://api.kde.org/frameworks/syntax-highlighting/html/index.html}
|
|
||||||
{KSyntaxHighlighting} offers generic highlighting. It is the syntax
|
|
||||||
highlighting engine for Kate syntax definitions. \QC comes with most of
|
|
||||||
the commonly used syntax files, and you can download additional files.
|
|
||||||
|
|
||||||
To download and use highlight definition files, go to \preferences >
|
|
||||||
\uicontrol {Text Editor} > \uicontrol {Generic Highlighter}.
|
|
||||||
|
|
||||||
For more information, see \l{Download highlight definitions}.
|
|
||||||
|
|
||||||
\section1 Adding Your Own Code Snippets
|
\section1 Adding Your Own Code Snippets
|
||||||
|
|
||||||
As you write code, \QC suggests properties, IDs, and code snippets to
|
As you write code, \QC suggests properties, IDs, and code snippets to
|
||||||
@@ -144,5 +111,72 @@
|
|||||||
To install plugins, go to \uicontrol Help > \uicontrol {About Plugins} and
|
To install plugins, go to \uicontrol Help > \uicontrol {About Plugins} and
|
||||||
select \uicontrol {Install Plugins}.
|
select \uicontrol {Install Plugins}.
|
||||||
|
|
||||||
|
\section1 Accessibility
|
||||||
|
|
||||||
|
You can use keyboard shortcuts to navigate the UI without a mouse, or set
|
||||||
|
zoom levels and change colors to improve the visibility of the text. Also,
|
||||||
|
\QC supports screen readers.
|
||||||
|
|
||||||
|
\section2 Changing Keyboard Shortcuts
|
||||||
|
|
||||||
|
You can use \QC with your favorite keyboard shortcuts.
|
||||||
|
|
||||||
|
To view and edit all keyboard shortcuts defined in \QC, go to \preferences >
|
||||||
|
\uicontrol Environment > \uicontrol Keyboard. For more information, see
|
||||||
|
\l{Keyboard Shortcuts}.
|
||||||
|
|
||||||
|
\section2 Navigating with the Keyboard
|
||||||
|
|
||||||
|
To move between UI controls, press the the \key Tab key or the \key Left,
|
||||||
|
\key Right, \key Up, and \key Down arrow keys.
|
||||||
|
|
||||||
|
\section2 Setting Zoom Levels
|
||||||
|
|
||||||
|
To set editor font and colors, select \preferences >
|
||||||
|
\uicontrol {Text Editor} > \uicontrol {Font & Colors}.
|
||||||
|
|
||||||
|
Select the font family and size, and set the zoom level in percentage for
|
||||||
|
viewing the text or use keyboard shortcuts or the mouse wheel to zoom in or
|
||||||
|
out.
|
||||||
|
|
||||||
|
To improve the readability of text in the editor, adjust the line spacing.
|
||||||
|
|
||||||
|
For more information, see \l{Font & Colors}.
|
||||||
|
|
||||||
|
The system configuration determines the font sizes in other parts of \QC.
|
||||||
|
|
||||||
|
When viewing output, use the \inlineimage icons/plus.png {Plus button} and
|
||||||
|
\inlineimage icons/minus.png {Minus button} buttons or keyboard shortcuts to
|
||||||
|
set the zoom level.
|
||||||
|
|
||||||
|
For more information, see \l{View output}.
|
||||||
|
|
||||||
|
\section2 Changing Color Schemes
|
||||||
|
|
||||||
|
Themes set the appearance of the \QC UI: widgets, colors, and icons.
|
||||||
|
|
||||||
|
To switch themes, go to \preferences > \uicontrol Environment >
|
||||||
|
\uicontrol Interface and select a theme in \uicontrol Theme.
|
||||||
|
|
||||||
|
Use the \QC text and code editors with your favorite color scheme that sets
|
||||||
|
highlighting of code elements and the background color. Select one of the
|
||||||
|
predefined color schemes or create custom ones. The color schemes apply to
|
||||||
|
highlighting C++ files, QML files, and generic files.
|
||||||
|
|
||||||
|
To change the color scheme, go to \preferences >
|
||||||
|
\uicontrol {Text Editor} > \uicontrol {Font & Colors}.
|
||||||
|
|
||||||
|
For more information, see \l{Change editor colors}.
|
||||||
|
|
||||||
|
\l{https://api.kde.org/frameworks/syntax-highlighting/html/index.html}
|
||||||
|
{KSyntaxHighlighting} offers generic highlighting. It is the syntax
|
||||||
|
highlighting engine for Kate syntax definitions. \QC comes with most of
|
||||||
|
the commonly used syntax files, and you can download additional files.
|
||||||
|
|
||||||
|
To download and use highlight definition files, go to \preferences >
|
||||||
|
\uicontrol {Text Editor} > \uicontrol {Generic Highlighter}.
|
||||||
|
|
||||||
|
For more information, see \l{Download highlight definitions}.
|
||||||
|
|
||||||
\sa {Installation}, {Reset \QC settings}, {Preferences}
|
\sa {Installation}, {Reset \QC settings}, {Preferences}
|
||||||
*/
|
*/
|
||||||
|
@@ -5373,7 +5373,8 @@ Erreur :
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Axis</source>
|
<source>Axis</source>
|
||||||
<translation></translation>
|
<translatorcomment>Peut être au pluriel ?</translatorcomment>
|
||||||
|
<translation>Axe</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Threshold</source>
|
<source>Threshold</source>
|
||||||
@@ -6184,10 +6185,6 @@ est en cours.</translation>
|
|||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
<name>QKeychain::JobPrivate</name>
|
<name>QKeychain::JobPrivate</name>
|
||||||
<message>
|
|
||||||
<source>Unknown error</source>
|
|
||||||
<translation>Erreur inconnue</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Access to keychain denied</source>
|
<source>Access to keychain denied</source>
|
||||||
<translatorcomment>keychain ?</translatorcomment>
|
<translatorcomment>keychain ?</translatorcomment>
|
||||||
@@ -6345,46 +6342,6 @@ Do you want to edit this effect?</source>
|
|||||||
<translation>Assurez-vous de l'avoir sauvegardé dans le compositeur d'effet.
|
<translation>Assurez-vous de l'avoir sauvegardé dans le compositeur d'effet.
|
||||||
Souhaitez-vous éditer cet effet ?</translation>
|
Souhaitez-vous éditer cet effet ?</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
|
||||||
<source>Access to keychain denied</source>
|
|
||||||
<translation>Accès au porte-clés refusé</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>No keyring daemon</source>
|
|
||||||
<translation>Aucun démon de trousseau disponible</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Already unlocked</source>
|
|
||||||
<translation>Déjà déverrouillé</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>No such keyring</source>
|
|
||||||
<translation>Aucun trousseau de ce type</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Bad arguments</source>
|
|
||||||
<translation>Arguments incorrects</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>I/O error</source>
|
|
||||||
<translation>Erreur d'E/S</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Cancelled</source>
|
|
||||||
<translation>Annulé</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Keyring already exists</source>
|
|
||||||
<translation>Le trousseau existe déjà</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>No match</source>
|
|
||||||
<translation>Aucun résultat</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
|
||||||
<source>Unknown error</source>
|
|
||||||
<translation>Erreur inconnue</translation>
|
|
||||||
</message>
|
|
||||||
<message>
|
<message>
|
||||||
<source>Entry not found</source>
|
<source>Entry not found</source>
|
||||||
<translation>Entrée introuvable</translation>
|
<translation>Entrée introuvable</translation>
|
||||||
@@ -12958,7 +12915,7 @@ Exécutable : %2</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Stop on failure</source>
|
<source>Stop on failure</source>
|
||||||
<translation>Arrêt sur échec</translation>
|
<translation>Arrêter sur échec</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Run tests in parallel mode using given number of jobs.</source>
|
<source>Run tests in parallel mode using given number of jobs.</source>
|
||||||
@@ -13204,7 +13161,7 @@ Voir la documentation de Google Test pour plus d'informations sur les filtr
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Event counter</source>
|
<source>Event counter</source>
|
||||||
<translation>Compteurd'événements</translation>
|
<translation>Compteur d'événements</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Uses event counter when executing benchmarks.</source>
|
<source>Uses event counter when executing benchmarks.</source>
|
||||||
@@ -15659,11 +15616,11 @@ Par exemple, « Revision : 15 » laissera la branche à la révis
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>CMake arguments:</source>
|
<source>CMake arguments:</source>
|
||||||
<translation>Arguments de Cmake :</translation>
|
<translation>Arguments de CMake :</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Tool arguments:</source>
|
<source>Tool arguments:</source>
|
||||||
<translation>Arguments de l’outil :</translation>
|
<translation>Arguments de l'outil :</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Stage for installation</source>
|
<source>Stage for installation</source>
|
||||||
@@ -16048,7 +16005,7 @@ Par exemple, « Revision : 15 » laissera la branche à la révis
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>CMake generator defines how a project is built when using CMake.<br>This setting is ignored when using other build systems.</source>
|
<source>CMake generator defines how a project is built when using CMake.<br>This setting is ignored when using other build systems.</source>
|
||||||
<translation></translation>
|
<translation>Le générateur CMake définit comment le projet est compilé par CMake.<br>Ce paramètre est ignoré lors de l'utilisation d'un autre système de compilation.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>CMake Tool is unconfigured, CMake generator will be ignored.</source>
|
<source>CMake Tool is unconfigured, CMake generator will be ignored.</source>
|
||||||
@@ -17818,8 +17775,8 @@ Définissez d’abord un exécutable valide.</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Class View</source>
|
<source>Class View</source>
|
||||||
<translatorcomment>Ou est-ce un rapport avec la Vue ? (graphics/view)</translatorcomment>
|
<translatorcomment>Ce texte est affiché dans le combobox du panneau de gauche (où l'on affiche la hiérarchie du projets ou le système de fichiers). Peut être que "symboles" aurait plus sa place, sachant que ce mode affiche une liste des classes et les symboles définis par ces classes.</translatorcomment>
|
||||||
<translation>Affichage de la classe</translation>
|
<translation>Classes</translation>
|
||||||
</message>
|
</message>
|
||||||
</context>
|
</context>
|
||||||
<context>
|
<context>
|
||||||
@@ -20315,7 +20272,8 @@ provided they were unmodified before the refactoring.</source>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Whole words o&nly</source>
|
<source>Whole words o&nly</source>
|
||||||
<translation>&Mots complets uniquement</translation>
|
<translatorcomment>On trouve, plus couramment, l'expression "Mots entiers"</translatorcomment>
|
||||||
|
<translation>&Mots entiers uniquement</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Use re&gular expressions</source>
|
<source>Use re&gular expressions</source>
|
||||||
@@ -20403,7 +20361,7 @@ provided they were unmodified before the refactoring.</source>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Whole Words Only</source>
|
<source>Whole Words Only</source>
|
||||||
<translation>Mots complets uniquement</translation>
|
<translation>Mots entiers uniquement</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Use Regular Expressions</source>
|
<source>Use Regular Expressions</source>
|
||||||
@@ -20696,7 +20654,7 @@ To do this, you type this shortcut and a space in the Locator entry field, and t
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><html><body style="color:#909090; font-size:14px"><div align='center'><div style="font-size:20px">Open a document</div><table><tr><td><hr/><div style="margin-top: 5px">&bull; File > Open File or Project (%1)</div><div style="margin-top: 5px">&bull; File > Recent Files</div><div style="margin-top: 5px">&bull; Tools > Locate (%2) and</div><div style="margin-left: 1em">- type to open file from any open project</div>%4%5<div style="margin-left: 1em">- type <code>%3&lt;space&gt;&lt;filename&gt;</code> to open file from file system</div><div style="margin-left: 1em">- select one of the other filters for jumping to a location</div><div style="margin-top: 5px">&bull; Drag and drop files here</div></td></tr></table></div></body></html></source>
|
<source><html><body style="color:#909090; font-size:14px"><div align='center'><div style="font-size:20px">Open a document</div><table><tr><td><hr/><div style="margin-top: 5px">&bull; File > Open File or Project (%1)</div><div style="margin-top: 5px">&bull; File > Recent Files</div><div style="margin-top: 5px">&bull; Tools > Locate (%2) and</div><div style="margin-left: 1em">- type to open file from any open project</div>%4%5<div style="margin-left: 1em">- type <code>%3&lt;space&gt;&lt;filename&gt;</code> to open file from file system</div><div style="margin-left: 1em">- select one of the other filters for jumping to a location</div><div style="margin-top: 5px">&bull; Drag and drop files here</div></td></tr></table></div></body></html></source>
|
||||||
<translation><html><body style="color:#909090; font-size:14px"><div align='center'><div style="font-size:20px">Ouvrir un document</div><table><tr><td><hr/><div style="margin-top: 5px">&bull; Fichier> Ouvrir un fichier ou un projet (%1)</div><div style="margin-top: 5px">&bull; Fichier > Fichiers récents</div><div style="margin-top: 5px">&bull; Outils > Localiser (%2) et</div><div style="margin-left: 1em">- taper pour ouvrir un fichier à partir de n’importe quel projet ouvert</div>%4%5<div style="margin-left: 1em">- saisir <code>%3&lt;espace&gt;&lt;nom du fichier&gt;</code> pour ouvrir le fichier à partir du système de fichiers</div><div style="margin-left: 1em">- sélectionner l’un des autres filtres pour accéder à un emplacement donné</div><div style="margin-top: 5px">&bull; Glisser-déposer des fichiers ici</div></td></tr></table></div></body></html></translation>
|
<translation><html><body style="color:#909090; font-size:14px"><div align='center'><div style="font-size:20px">Ouvrir un document</div><table><tr><td><hr/><div style="margin-top: 5px">&bull; Fichier > Ouvrir un fichier ou un projet (%1)</div><div style="margin-top: 5px">&bull; Fichier > Fichiers récents</div><div style="margin-top: 5px">&bull; Outils > Localiser (%2) et</div><div style="margin-left: 1em">- taper pour ouvrir un fichier à partir de n’importe quel projet ouvert</div>%4%5<div style="margin-left: 1em">- saisir <code>%3&lt;espace&gt;&lt;nom du fichier&gt;</code> pour ouvrir le fichier à partir du système de fichiers</div><div style="margin-left: 1em">- sélectionner l’un des autres filtres pour accéder à un emplacement donné</div><div style="margin-top: 5px">&bull; Glisser-déposer des fichiers ici</div></td></tr></table></div></body></html></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><div style="margin-left: 1em">- type <code>%1&lt;space&gt;&lt;pattern&gt;</code> to jump to a class definition</div></source>
|
<source><div style="margin-left: 1em">- type <code>%1&lt;space&gt;&lt;pattern&gt;</code> to jump to a class definition</div></source>
|
||||||
@@ -21214,8 +21172,8 @@ To do this, you type this shortcut and a space in the Locator entry field, and t
|
|||||||
<translation>Type</translation>
|
<translation>Type</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><html><head/><body><p>MIME magic data is interpreted as defined by the Shared MIME-info Database specification from <a href="http://standards.freedesktop.org/shared-mime-info-spec/shared-mime-info-spec-latest.html">freedesktop.org</a>.<hr/></p></body></html></source>
|
<source><html><head/><body><p>MIME magic data is interpreted as defined by the Shared MIME-info Database specification from <a href="https://www.freedesktop.org/wiki/Specifications/shared-mime-info-spec/">freedesktop.org</a>.<hr/></p></body></html></source>
|
||||||
<translation><html><head/><body><p>Les données magiques MIME sont interprétées conformément à la spécification de la base de données partagée d’informations MIME de <a href="http://standards.freedesktop.org/shared-mime-info-spec/shared-mime-info-spec-latest.html">freedesktop.org</a>.<hr/></p></body></html></translation>
|
<translation><html><head/><body><p>Les données magiques MIME sont interprétées conformément à la spécification de la base de données partagée d’informations MIME fournie par <a href="https://www.freedesktop.org/wiki/Specifications/shared-mime-info-spec/">freedesktop.org</a>.<hr/></p></body></html></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>String</source>
|
<source>String</source>
|
||||||
@@ -23862,7 +23820,7 @@ Ces préfixes sont utilisés en complément au répertoire actuel pour basculer
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Switch Between Function Declaration/Definition</source>
|
<source>Switch Between Function Declaration/Definition</source>
|
||||||
<translation>Changer entre la définition et déclaration de la fonction</translation>
|
<translation>Changer entre la définition et la déclaration de la fonction</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Open Function Declaration/Definition in Next Split</source>
|
<source>Open Function Declaration/Definition in Next Split</source>
|
||||||
@@ -26804,7 +26762,8 @@ Il peut vous être demandé de partager le contenu de ce journal lorsque vous si
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Global Debugger &Log</source>
|
<source>Global Debugger &Log</source>
|
||||||
<translation>&Journal du débogueur général</translation>
|
<translatorcomment>Je pense que "Global" se réfère au log et non au débogueur.</translatorcomment>
|
||||||
|
<translation>&Journal général du débogueur</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Reload Debugging Helpers</source>
|
<source>Reload Debugging Helpers</source>
|
||||||
@@ -27195,7 +27154,7 @@ Il peut vous être demandé de partager le contenu de ce journal lorsque vous si
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Start and Break on Main</source>
|
<source>Start and Break on Main</source>
|
||||||
<translation>Démarrer et s’arrêter sur le Main</translation>
|
<translation>Démarrer et s'arrêter sur la fonction Main</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>DAP</source>
|
<source>DAP</source>
|
||||||
@@ -27344,7 +27303,8 @@ Il peut vous être demandé de partager le contenu de ce journal lorsque vous si
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><html><head/><body><p>You are trying to run the tool "%1" on an application in %2 mode. The tool is designed to be used %3.</p><p>Run-time characteristics differ significantly between optimized and non-optimized binaries. Analytical findings for one mode may or may not be relevant for the other.</p><p>Running tools that need debug symbols on binaries that don't provide any may lead to missing function names or otherwise insufficient output.</p><p>Do you want to continue and run the tool in %2 mode?</p></body></html></source>
|
<source><html><head/><body><p>You are trying to run the tool "%1" on an application in %2 mode. The tool is designed to be used %3.</p><p>Run-time characteristics differ significantly between optimized and non-optimized binaries. Analytical findings for one mode may or may not be relevant for the other.</p><p>Running tools that need debug symbols on binaries that don't provide any may lead to missing function names or otherwise insufficient output.</p><p>Do you want to continue and run the tool in %2 mode?</p></body></html></source>
|
||||||
<translation><html><head/><body><p>Vous essayez d’exécuter l’outil « %1 » sur une application en mode %2. L’outil est conçu pour être utilisé en mode %3.</p><p>Les caractéristiques d’exécution diffèrent considérablement entre les binaires optimisés et non optimisés. L’exécution d’outils nécessitant des symboles de débogage sur des binaires qui n’en fournissent pas peut conduire à des noms de fonctions manquants ou à des résultats insuffisants.</p><p>Voulez-vous continuer et exécuter l’outil en mode %2 ?</p></body></html></translation>
|
<translatorcomment>%3 est remplacé par la chaîne précédente (on optimized code...)</translatorcomment>
|
||||||
|
<translation><html><head/><body><p>Vous essayez d'exécuter l'outil « %1 » sur une application en mode %2. L'outil est conçu pour être utilisé %3.</p><p>Les caractéristiques d'exécution diffèrent considérablement entre les binaires optimisés et non optimisés. L'exécution d'outils nécessitant des symboles de débogage sur des binaires qui n'en fournissent pas peut conduire à des noms de fonctions manquants ou à des résultats insuffisants.</p><p>Voulez-vous continuer et exécuter l'outil en mode %2 ?</p></body></html></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Start</source>
|
<source>Start</source>
|
||||||
@@ -30909,7 +30869,7 @@ Raison : %3</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Plugin Emulation</source>
|
<source>Plugin Emulation</source>
|
||||||
<translation>Émulation de plug-in</translation>
|
<translation>Émulation de greffon</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Use smartcase</source>
|
<source>Use smartcase</source>
|
||||||
@@ -30917,7 +30877,7 @@ Raison : %3</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Use wrapscan</source>
|
<source>Use wrapscan</source>
|
||||||
<translation>Utiliser recherche circulaire</translation>
|
<translation>Utiliser la recherche circulaire</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Use ignorecase</source>
|
<source>Use ignorecase</source>
|
||||||
@@ -32712,7 +32672,7 @@ Valider maintenant ?</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Manage Remotes...</source>
|
<source>Manage Remotes...</source>
|
||||||
<translation></translation>
|
<translation>Gérer les dépôts distants…</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Git &Tools</source>
|
<source>Git &Tools</source>
|
||||||
@@ -41850,7 +41810,7 @@ Sélectionne un Qt optimisé pour bureaux pour compiler l'application, si d
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Nim Script File</source>
|
<source>Nim Script File</source>
|
||||||
<translation></translation>
|
<translation>Fichier de script Nim</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Creates an empty Nim file using UTF-8 charset.</source>
|
<source>Creates an empty Nim file using UTF-8 charset.</source>
|
||||||
@@ -43467,7 +43427,8 @@ Activez cette option si vous envisagez de créer des binaires x86 32 bits sans u
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Standard error</source>
|
<source>Standard error</source>
|
||||||
<translation>Sortie erreur (stderr)</translation>
|
<translatorcomment>A revoir -> Sortie d'erreur</translatorcomment>
|
||||||
|
<translation>Sortie d'erreur (stderr)</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>E&rror message:</source>
|
<source>E&rror message:</source>
|
||||||
@@ -43926,7 +43887,7 @@ Activez cette option si vous envisagez de créer des binaires x86 32 bits sans u
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Files in All Project Directories:</source>
|
<source>Files in All Project Directories:</source>
|
||||||
<translation>Fichiers dans tous les répertoires du projet :</translation>
|
<translation>Fichiers dans tous les répertoires du projet :</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Setting</source>
|
<source>Setting</source>
|
||||||
@@ -55011,7 +54972,8 @@ Ne s’applique pas aux espaces blancs dans les commentaires et dans les chaîne
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Underline</source>
|
<source>Underline</source>
|
||||||
<translation></translation>
|
<translatorcomment>Vu dans LibreOffice</translatorcomment>
|
||||||
|
<translation>Soulignage</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Color:</source>
|
<source>Color:</source>
|
||||||
@@ -57242,7 +57204,7 @@ dans « %2 ».
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Show %1 Column</source>
|
<source>Show %1 Column</source>
|
||||||
<translation></translation>
|
<translation>Afficher la colonne « %1 »</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>No clangd executable specified.</source>
|
<source>No clangd executable specified.</source>
|
||||||
@@ -57272,7 +57234,7 @@ dans « %2 ».
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Error while trying to copy file: %1</source>
|
<source>Error while trying to copy file: %1</source>
|
||||||
<translation></translation>
|
<translation>Erreur lors de la copie du fichier : %1</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Could not copy file: %1</source>
|
<source>Could not copy file: %1</source>
|
||||||
@@ -57441,7 +57403,7 @@ Pour définir ou changer une variable, utilisez VARIABLE=VALEUR.
|
|||||||
Pour désactiver une variable, préfixez la ligne avec le caractère « # ».
|
Pour désactiver une variable, préfixez la ligne avec le caractère « # ».
|
||||||
Pour suffixer une variable, utilisez VARIABLE+=VALEUR.
|
Pour suffixer une variable, utilisez VARIABLE+=VALEUR.
|
||||||
Pour préfixer une variable, utilisez VARIABLE=+VALEUR.
|
Pour préfixer une variable, utilisez VARIABLE=+VALEUR.
|
||||||
Les variables existantes peuvent être référencées dans une VALEUR avec ${OTHER}.
|
Les variables existantes peuvent être référencées dans une VALEUR avec ${AUTRE}.
|
||||||
Pour effacer une variable, placez son nom sur une ligne avec rien d'autre sur celle-ci.
|
Pour effacer une variable, placez son nom sur une ligne avec rien d'autre sur celle-ci.
|
||||||
Les lignes débutant avec « ### » seront traitées comme commentaires.</translation>
|
Les lignes débutant avec « ### » seront traitées comme commentaires.</translation>
|
||||||
</message>
|
</message>
|
||||||
@@ -57754,7 +57716,7 @@ Les lignes débutant avec « ### » seront traitées comme commentaire
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Backtrace frame count:</source>
|
<source>Backtrace frame count:</source>
|
||||||
<translation>Backtracer le nombre de trames :</translation>
|
<translation>Nombre de trames à remonter :</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Suppression files:</source>
|
<source>Suppression files:</source>
|
||||||
@@ -57906,7 +57868,7 @@ Avec la simulation du cache, d’autres compteurs d’évènements sont activés
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Check for leaks on finish:</source>
|
<source>Check for leaks on finish:</source>
|
||||||
<translation>Vérification des fuites lorsque c’est fini :</translation>
|
<translation>Vérification des fuites à la fin :</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Summary Only</source>
|
<source>Summary Only</source>
|
||||||
@@ -59205,7 +59167,7 @@ Vérifiez les paramètres pour vous assurer que Valgrind est installé et dispon
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Wrap submit message at:</source>
|
<source>Wrap submit message at:</source>
|
||||||
<translation>Limiter la largeur du message à :</translation>
|
<translation>Limiter la taille du message à :</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source> characters</source>
|
<source> characters</source>
|
||||||
@@ -59550,7 +59512,7 @@ si un dépôt requiert une authentification SSH (voir la documentation sur SSH e
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Mode Selector</source>
|
<source>Mode Selector</source>
|
||||||
<translation></translation>
|
<translation>Sélecteur de mode</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Select different modes depending on the task at hand.</source>
|
<source>Select different modes depending on the task at hand.</source>
|
||||||
@@ -59558,7 +59520,7 @@ si un dépôt requiert une authentification SSH (voir la documentation sur SSH e
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source><p style="margin-top: 30px"><table><tr><td style="padding-right: 20px">Welcome:</td><td>Open examples, tutorials, and recent sessions and projects.</td></tr><tr><td>Edit:</td><td>Work with code and navigate your project.</td></tr><tr><td>Design:</td><td>Visually edit Widget-based user interfaces, state charts and UML models.</td></tr><tr><td>Debug:</td><td>Analyze your application with a debugger or other analyzers.</td></tr><tr><td>Projects:</td><td>Manage project settings.</td></tr><tr><td>Help:</td><td>Browse the help database.</td></tr></table></p></source>
|
<source><p style="margin-top: 30px"><table><tr><td style="padding-right: 20px">Welcome:</td><td>Open examples, tutorials, and recent sessions and projects.</td></tr><tr><td>Edit:</td><td>Work with code and navigate your project.</td></tr><tr><td>Design:</td><td>Visually edit Widget-based user interfaces, state charts and UML models.</td></tr><tr><td>Debug:</td><td>Analyze your application with a debugger or other analyzers.</td></tr><tr><td>Projects:</td><td>Manage project settings.</td></tr><tr><td>Help:</td><td>Browse the help database.</td></tr></table></p></source>
|
||||||
<translation><p style="margin-top: 30px"><table><tr><td style="padding-right: 20px">Accueil :</td><td>Ouvrez des exemples, des tutoriels et des sessions et projets récents.</td></tr><td>Modifier :</td><td>Travaillez avec le code et naviguez dans votre projet.</td></tr><tr><td>Design:</td><td>Modifiez visuellement des interfaces utilisateur basées sur des widgets, des diagrammes d’état et des modèles UML. </td></tr><ttr><td>Débogage :</td><td>Analysez votre application avec un débogueur ou d’autres analyseurs.</td></tr><tr><td>Projets :</td><td>Gérez les paramètres du projet.</td></tr><tr><td>Aide :</td><td>Parcourez la base de données d’aide.</td></tr></table></p></translation>
|
<translation><p style="margin-top: 30px"><table><tr><td style="padding-right: 20px">Accueil :</td><td>Ouvrez des exemples, des tutoriels et des sessions et projets récents.</td></tr><tr><td>Modifier :</td><td>Travaillez avec le code et naviguez dans votre projet.</td></tr><tr><td>Design :</td><td>Modifiez visuellement des interfaces utilisateur basées sur des widgets, des diagrammes d'état et des modèles UML. </td></tr><tr><td>Débogage :</td><td>Analysez votre application avec un débogueur ou d'autres analyseurs.</td></tr><tr><td>Projets :</td><td>Gérez les paramètres du projet.</td></tr><tr><td>Aide :</td><td>Parcourez la base de données d'aide.</td></tr></table></p></translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Kit Selector</source>
|
<source>Kit Selector</source>
|
||||||
@@ -59590,7 +59552,7 @@ si un dépôt requiert une authentification SSH (voir la documentation sur SSH e
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Build the active project.</source>
|
<source>Build the active project.</source>
|
||||||
<translation>Compiler le projet actif.</translation>
|
<translation>Compile le projet actif.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Locator</source>
|
<source>Locator</source>
|
||||||
@@ -59610,7 +59572,7 @@ si un dépôt requiert une authentification SSH (voir la documentation sur SSH e
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Find compile and application output here, as well as a list of configuration and build issues, and the panel for global searches.</source>
|
<source>Find compile and application output here, as well as a list of configuration and build issues, and the panel for global searches.</source>
|
||||||
<translation>Vous y trouverez les résultats de la compilation et de l’application, ainsi qu’une liste des problèmes de configuration et de compilation, et le panneau des recherches générales.</translation>
|
<translation>Vous y trouverez les résultats de la compilation et de l'application, ainsi qu’une liste des problèmes de configuration et de compilation, ainsi que le panneau des recherches globales.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Progress Indicator</source>
|
<source>Progress Indicator</source>
|
||||||
@@ -59634,8 +59596,7 @@ si un dépôt requiert une authentification SSH (voir la documentation sur SSH e
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>You have now completed the UI tour. To learn more about the highlighted controls, see <a style="color: #41CD52" href="qthelp://org.qt-project.qtcreator/doc/creator-quick-tour.html">User Interface</a>.</source>
|
<source>You have now completed the UI tour. To learn more about the highlighted controls, see <a style="color: #41CD52" href="qthelp://org.qt-project.qtcreator/doc/creator-quick-tour.html">User Interface</a>.</source>
|
||||||
<translation>Vous avez maintenant terminé la visite guidée de l’interface utilisateur
|
<translation>Vous avez maintenant terminé la visite guidée de l'interface utilisateur. Pour en savoir plus sur les contrôles mis en évidence, consultez la page d'aide concernant l'<a style="color: #41CD52" href="qthelp://org.qt-project.qtcreator/doc/creator-quick-tour.html">interface utilisateur</a>.</translation>
|
||||||
Pour en savoir plus sur les contrôles mis en évidence, voir l’<a style="color: #41CD52" href="qthelp://org.qt-project.qtcreator/doc/creator-quick-tour.html">interface utilisateur</a>.</translation>
|
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>UI Introduction %1/%2 ></source>
|
<source>UI Introduction %1/%2 ></source>
|
||||||
@@ -60869,7 +60830,7 @@ Elle est utilisée pour calculer la taille totale implicite.</translation>
|
|||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Current value of the Slider. The default value is 0.0.</source>
|
<source>Current value of the Slider. The default value is 0.0.</source>
|
||||||
<translation></translation>
|
<translation>Valeur actuelle du slider. La valeur par défaut est 0.0.</translation>
|
||||||
</message>
|
</message>
|
||||||
<message>
|
<message>
|
||||||
<source>Maximum value</source>
|
<source>Maximum value</source>
|
||||||
|
3
src/libs/3rdparty/sol2/include/sol/sol.hpp
vendored
3
src/libs/3rdparty/sol2/include/sol/sol.hpp
vendored
@@ -6818,7 +6818,8 @@ namespace sol {
|
|||||||
static_assert(std::is_constructible<T, Args&&...>::value, "T must be constructible with Args");
|
static_assert(std::is_constructible<T, Args&&...>::value, "T must be constructible with Args");
|
||||||
|
|
||||||
*this = nullopt;
|
*this = nullopt;
|
||||||
this->construct(std::forward<Args>(args)...);
|
new (static_cast<void*>(this)) optional(std::in_place, std::forward<Args>(args)...);
|
||||||
|
return **this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Swaps this optional with the other.
|
/// Swaps this optional with the other.
|
||||||
|
@@ -15,6 +15,7 @@
|
|||||||
#include "cmakespecificsettings.h"
|
#include "cmakespecificsettings.h"
|
||||||
#include "cmaketoolmanager.h"
|
#include "cmaketoolmanager.h"
|
||||||
#include "projecttreehelper.h"
|
#include "projecttreehelper.h"
|
||||||
|
#include "targethelper.h"
|
||||||
|
|
||||||
#include <android/androidconstants.h>
|
#include <android/androidconstants.h>
|
||||||
|
|
||||||
@@ -1031,6 +1032,11 @@ bool CMakeBuildSystem::renameFile(Node *context,
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CMakeBuildSystem::buildNamedTarget(const QString &target)
|
||||||
|
{
|
||||||
|
CMakeProjectManager::Internal::buildTarget(this, target);
|
||||||
|
}
|
||||||
|
|
||||||
FilePaths CMakeBuildSystem::filesGeneratedFrom(const FilePath &sourceFile) const
|
FilePaths CMakeBuildSystem::filesGeneratedFrom(const FilePath &sourceFile) const
|
||||||
{
|
{
|
||||||
FilePath project = projectDirectory();
|
FilePath project = projectDirectory();
|
||||||
|
@@ -64,6 +64,7 @@ public:
|
|||||||
bool renameFile(ProjectExplorer::Node *context,
|
bool renameFile(ProjectExplorer::Node *context,
|
||||||
const Utils::FilePath &oldFilePath,
|
const Utils::FilePath &oldFilePath,
|
||||||
const Utils::FilePath &newFilePath) final;
|
const Utils::FilePath &newFilePath) final;
|
||||||
|
void buildNamedTarget(const QString &target) final;
|
||||||
|
|
||||||
Utils::FilePaths filesGeneratedFrom(const Utils::FilePath &sourceFile) const final;
|
Utils::FilePaths filesGeneratedFrom(const Utils::FilePath &sourceFile) const final;
|
||||||
QString name() const final { return QLatin1String("cmake"); }
|
QString name() const final { return QLatin1String("cmake"); }
|
||||||
|
@@ -23,7 +23,7 @@ using namespace Utils;
|
|||||||
|
|
||||||
namespace CMakeProjectManager::Internal {
|
namespace CMakeProjectManager::Internal {
|
||||||
|
|
||||||
using BuildAcceptor = std::function<void(const FilePath &, const QString &)>;
|
using BuildAcceptor = std::function<void(const BuildSystem *, const QString &)>;
|
||||||
|
|
||||||
// CMakeBuildTargetFilter
|
// CMakeBuildTargetFilter
|
||||||
|
|
||||||
@@ -62,8 +62,8 @@ static LocatorMatcherTasks cmakeMatchers(const BuildAcceptor &acceptor)
|
|||||||
LocatorFilterEntry entry;
|
LocatorFilterEntry entry;
|
||||||
entry.displayName = displayName;
|
entry.displayName = displayName;
|
||||||
if (acceptor) {
|
if (acceptor) {
|
||||||
entry.acceptor = [projectPath, displayName, acceptor] {
|
entry.acceptor = [bs, displayName, acceptor] {
|
||||||
acceptor(projectPath, displayName);
|
acceptor(bs, displayName);
|
||||||
return AcceptResult();
|
return AcceptResult();
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@@ -4,34 +4,21 @@
|
|||||||
#include "targethelper.h"
|
#include "targethelper.h"
|
||||||
|
|
||||||
#include <projectexplorer/buildmanager.h>
|
#include <projectexplorer/buildmanager.h>
|
||||||
|
#include <projectexplorer/buildsystem.h>
|
||||||
#include <projectexplorer/buildsteplist.h>
|
#include <projectexplorer/buildsteplist.h>
|
||||||
#include <projectexplorer/projectmanager.h>
|
|
||||||
#include <projectexplorer/target.h>
|
|
||||||
#include <utils/algorithm.h>
|
|
||||||
|
|
||||||
#include "cmakebuildstep.h"
|
#include "cmakebuildstep.h"
|
||||||
#include "cmakebuildsystem.h"
|
|
||||||
#include "cmakeproject.h"
|
|
||||||
|
|
||||||
namespace CMakeProjectManager {
|
namespace CMakeProjectManager::Internal {
|
||||||
|
|
||||||
void buildTarget(const Utils::FilePath &projectPath, const QString &targetName)
|
void buildTarget(const ProjectExplorer::BuildSystem *buildSystem, const QString &targetName)
|
||||||
{
|
{
|
||||||
// Get the project containing the target selected
|
if (ProjectExplorer::BuildManager::isBuilding(buildSystem->project()))
|
||||||
const auto cmakeProject = qobject_cast<CMakeProject *>(Utils::findOrDefault(
|
|
||||||
ProjectExplorer::ProjectManager::projects(), [projectPath](ProjectExplorer::Project *p) {
|
|
||||||
return p->projectFilePath() == projectPath;
|
|
||||||
}));
|
|
||||||
if (!cmakeProject || !cmakeProject->activeTarget()
|
|
||||||
|| !cmakeProject->activeTarget()->activeBuildConfiguration())
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (ProjectExplorer::BuildManager::isBuilding(cmakeProject))
|
|
||||||
ProjectExplorer::BuildManager::cancel();
|
ProjectExplorer::BuildManager::cancel();
|
||||||
|
|
||||||
// Find the make step
|
// Find the make step
|
||||||
const ProjectExplorer::BuildStepList *buildStepList
|
const ProjectExplorer::BuildStepList *buildStepList
|
||||||
= cmakeProject->activeTarget()->activeBuildConfiguration()->buildSteps();
|
= buildSystem->buildConfiguration()->buildSteps();
|
||||||
const auto buildStep = buildStepList->firstOfType<Internal::CMakeBuildStep>();
|
const auto buildStep = buildStepList->firstOfType<Internal::CMakeBuildStep>();
|
||||||
if (!buildStep)
|
if (!buildStep)
|
||||||
return;
|
return;
|
||||||
@@ -41,8 +28,8 @@ void buildTarget(const Utils::FilePath &projectPath, const QString &targetName)
|
|||||||
buildStep->setBuildTargets({targetName});
|
buildStep->setBuildTargets({targetName});
|
||||||
|
|
||||||
// Build
|
// Build
|
||||||
ProjectExplorer::BuildManager::buildProjectWithDependencies(cmakeProject);
|
ProjectExplorer::BuildManager::buildProjectWithDependencies(buildSystem->project());
|
||||||
buildStep->setBuildTargets(oldTargets);
|
buildStep->setBuildTargets(oldTargets);
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace CMakeProjectManager
|
} // namespace CMakeProjectManager::Internal
|
||||||
|
@@ -3,12 +3,12 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "cmake_global.h"
|
#include <QString>
|
||||||
|
|
||||||
#include <utils/filepath.h>
|
namespace ProjectExplorer { class BuildSystem; }
|
||||||
|
|
||||||
namespace CMakeProjectManager {
|
namespace CMakeProjectManager::Internal {
|
||||||
|
|
||||||
CMAKE_EXPORT void buildTarget(const Utils::FilePath &projectPath, const QString &targetName);
|
void buildTarget(const ProjectExplorer::BuildSystem *buildSystem, const QString &targetName);
|
||||||
|
|
||||||
} // namespace CMakeProjectManager
|
} // namespace CMakeProjectManager::Internal
|
||||||
|
@@ -23,23 +23,118 @@ static inline QString msgCannotInterrupt(qint64 pid, const QString &why)
|
|||||||
# define PROCESS_SUSPEND_RESUME (0x0800)
|
# define PROCESS_SUSPEND_RESUME (0x0800)
|
||||||
#endif // PROCESS_SUSPEND_RESUME
|
#endif // PROCESS_SUSPEND_RESUME
|
||||||
|
|
||||||
|
static BOOL isWow64Process(HANDLE hproc)
|
||||||
|
{
|
||||||
|
using LPFN_ISWOW64PROCESS = BOOL (WINAPI*)(HANDLE, PBOOL);
|
||||||
|
|
||||||
|
BOOL ret = false;
|
||||||
|
|
||||||
|
static LPFN_ISWOW64PROCESS fnIsWow64Process = NULL;
|
||||||
|
if (!fnIsWow64Process) {
|
||||||
|
if (HMODULE hModule = GetModuleHandle(L"kernel32.dll"))
|
||||||
|
fnIsWow64Process = reinterpret_cast<LPFN_ISWOW64PROCESS>(GetProcAddress(hModule, "IsWow64Process"));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!fnIsWow64Process) {
|
||||||
|
qWarning("Cannot retrieve symbol 'IsWow64Process'.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!fnIsWow64Process(hproc, &ret)) {
|
||||||
|
qWarning("IsWow64Process() failed for %p: %s",
|
||||||
|
hproc, qPrintable(Utils::winErrorMessage(GetLastError())));
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
// Open the process and break into it
|
// Open the process and break into it
|
||||||
bool Debugger::Internal::interruptProcess(qint64 pID, QString *errorMessage)
|
bool Debugger::Internal::interruptProcess(qint64 pID, QString *errorMessage)
|
||||||
{
|
{
|
||||||
bool ok = false;
|
bool ok = false;
|
||||||
HANDLE inferior = NULL;
|
HANDLE inferior = NULL;
|
||||||
const DWORD rights = PROCESS_QUERY_INFORMATION | PROCESS_SET_INFORMATION | PROCESS_VM_OPERATION
|
do {
|
||||||
| PROCESS_VM_WRITE | PROCESS_VM_READ | PROCESS_DUP_HANDLE
|
const DWORD rights = PROCESS_QUERY_INFORMATION|PROCESS_SET_INFORMATION
|
||||||
| PROCESS_TERMINATE | PROCESS_CREATE_THREAD | PROCESS_SUSPEND_RESUME;
|
|PROCESS_VM_OPERATION|PROCESS_VM_WRITE|PROCESS_VM_READ
|
||||||
inferior = OpenProcess(rights, FALSE, DWORD(pID));
|
|PROCESS_DUP_HANDLE|PROCESS_TERMINATE|PROCESS_CREATE_THREAD|PROCESS_SUSPEND_RESUME;
|
||||||
if (inferior == NULL) {
|
inferior = OpenProcess(rights, FALSE, DWORD(pID));
|
||||||
*errorMessage = QString::fromLatin1("Cannot open process %1: %2")
|
if (inferior == NULL) {
|
||||||
.arg(pID)
|
*errorMessage = QString::fromLatin1("Cannot open process %1: %2").
|
||||||
.arg(Utils::winErrorMessage(GetLastError()));
|
arg(pID).arg(Utils::winErrorMessage(GetLastError()));
|
||||||
} else if (ok = DebugBreakProcess(inferior); !ok) {
|
break;
|
||||||
*errorMessage = "DebugBreakProcess failed: " + Utils::winErrorMessage(GetLastError());
|
}
|
||||||
}
|
|
||||||
|
|
||||||
|
enum DebugBreakApi {
|
||||||
|
UseDebugBreakApi,
|
||||||
|
UseWin64Interrupt,
|
||||||
|
UseWin32Interrupt
|
||||||
|
};
|
||||||
|
/*
|
||||||
|
Windows 64 bit has a 32 bit subsystem (WOW64) which makes it possible to run a
|
||||||
|
32 bit application inside a 64 bit environment.
|
||||||
|
When GDB is used DebugBreakProcess must be called from the same system (32/64 bit) running
|
||||||
|
the inferior.
|
||||||
|
Therefore we need helper executables (win(32/64)interrupt.exe) on Windows 64 bit calling
|
||||||
|
DebugBreakProcess from the correct system.
|
||||||
|
|
||||||
|
DebugBreak matrix for windows
|
||||||
|
|
||||||
|
Api = UseDebugBreakApi
|
||||||
|
Win64 = UseWin64Interrupt
|
||||||
|
Win32 = UseWin32Interrupt
|
||||||
|
N/A = This configuration is not possible
|
||||||
|
|
||||||
|
| Windows 32bit | Windows 64bit
|
||||||
|
| QtCreator 32bit | QtCreator 32bit | QtCreator 64bit
|
||||||
|
| Inferior 32bit | Inferior 32bit | Inferior 64bit | Inferior 32bit | Inferior 64bit |
|
||||||
|
----------|-----------------|-----------------|-----------------|-----------------|----------------|
|
||||||
|
GDB 32bit | Api | Api | NA | Win32 | NA |
|
||||||
|
64bit | NA | Api | Win64 | Win32 | Api |
|
||||||
|
----------|-----------------|-----------------|-----------------|-----------------|----------------|
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
DebugBreakApi breakApi = UseDebugBreakApi;
|
||||||
|
#ifdef Q_OS_WIN64
|
||||||
|
if (isWow64Process(inferior))
|
||||||
|
breakApi = UseWin32Interrupt;
|
||||||
|
#else
|
||||||
|
if (isWow64Process(GetCurrentProcess()) && !isWow64Process(inferior))
|
||||||
|
breakApi = UseWin64Interrupt;
|
||||||
|
#endif
|
||||||
|
if (breakApi == UseDebugBreakApi) {
|
||||||
|
ok = DebugBreakProcess(inferior);
|
||||||
|
if (!ok)
|
||||||
|
*errorMessage = "DebugBreakProcess failed: " + Utils::winErrorMessage(GetLastError());
|
||||||
|
} else {
|
||||||
|
const QString executable = breakApi == UseWin32Interrupt
|
||||||
|
? QCoreApplication::applicationDirPath() + "/win32interrupt.exe"
|
||||||
|
: QCoreApplication::applicationDirPath() + "/win64interrupt.exe";
|
||||||
|
if (!QFileInfo::exists(executable)) {
|
||||||
|
*errorMessage = QString::fromLatin1(
|
||||||
|
"%1 does not exist. If you have built %2 "
|
||||||
|
"on your own, checkout "
|
||||||
|
"https://code.qt.io/cgit/qt-creator/binary-artifacts.git/.")
|
||||||
|
.arg(QDir::toNativeSeparators(executable),
|
||||||
|
QGuiApplication::applicationDisplayName());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
switch (QProcess::execute(executable, QStringList(QString::number(pID)))) {
|
||||||
|
case -2:
|
||||||
|
*errorMessage = QString::fromLatin1("Cannot start %1. Check src\\tools\\win64interrupt\\win64interrupt.c for more information.").
|
||||||
|
arg(QDir::toNativeSeparators(executable));
|
||||||
|
break;
|
||||||
|
case 0:
|
||||||
|
ok = true;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
*errorMessage = QDir::toNativeSeparators(executable)
|
||||||
|
+ " could not break the process.";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} while (false);
|
||||||
if (inferior != NULL)
|
if (inferior != NULL)
|
||||||
CloseHandle(inferior);
|
CloseHandle(inferior);
|
||||||
if (!ok)
|
if (!ok)
|
||||||
|
@@ -82,6 +82,7 @@ public:
|
|||||||
const Utils::FilePath &newFilePath);
|
const Utils::FilePath &newFilePath);
|
||||||
virtual bool addDependencies(Node *context, const QStringList &dependencies);
|
virtual bool addDependencies(Node *context, const QStringList &dependencies);
|
||||||
virtual bool supportsAction(Node *context, ProjectAction action, const Node *node) const;
|
virtual bool supportsAction(Node *context, ProjectAction action, const Node *node) const;
|
||||||
|
virtual void buildNamedTarget(const QString &target) { Q_UNUSED(target) }
|
||||||
virtual QString name() const = 0;
|
virtual QString name() const = 0;
|
||||||
|
|
||||||
// Owned by the build system. Use only in main thread. Can go away at any time.
|
// Owned by the build system. Use only in main thread. Can go away at any time.
|
||||||
|
@@ -102,20 +102,90 @@ void DesktopProcessSignalOperation::killProcessSilently(qint64 pid)
|
|||||||
void DesktopProcessSignalOperation::interruptProcessSilently(qint64 pid)
|
void DesktopProcessSignalOperation::interruptProcessSilently(qint64 pid)
|
||||||
{
|
{
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
|
enum SpecialInterrupt { NoSpecialInterrupt, Win32Interrupt, Win64Interrupt };
|
||||||
|
|
||||||
|
bool is64BitSystem = is64BitWindowsSystem();
|
||||||
|
SpecialInterrupt si = NoSpecialInterrupt;
|
||||||
|
if (is64BitSystem)
|
||||||
|
si = is64BitWindowsBinary(m_debuggerCommand) ? Win64Interrupt : Win32Interrupt;
|
||||||
|
/*
|
||||||
|
Windows 64 bit has a 32 bit subsystem (WOW64) which makes it possible to run a
|
||||||
|
32 bit application inside a 64 bit environment.
|
||||||
|
When GDB is used DebugBreakProcess must be called from the same system (32/64 bit) running
|
||||||
|
the inferior. If CDB is used we could in theory break wow64 processes,
|
||||||
|
but the break is actually a wow64 breakpoint. CDB is configured to ignore these
|
||||||
|
breakpoints, because they also appear on module loading.
|
||||||
|
Therefore we need helper executables (win(32/64)interrupt.exe) on Windows 64 bit calling
|
||||||
|
DebugBreakProcess from the correct system.
|
||||||
|
|
||||||
|
DebugBreak matrix for windows
|
||||||
|
|
||||||
|
Api = UseDebugBreakApi
|
||||||
|
Win64 = UseWin64InterruptHelper
|
||||||
|
Win32 = UseWin32InterruptHelper
|
||||||
|
N/A = This configuration is not possible
|
||||||
|
|
||||||
|
| Windows 32bit | Windows 64bit
|
||||||
|
| QtCreator 32bit | QtCreator 32bit | QtCreator 64bit
|
||||||
|
| Inferior 32bit | Inferior 32bit | Inferior 64bit | Inferior 32bit | Inferior 64bit
|
||||||
|
----------|-----------------|-----------------|-----------------|-----------------|----------------
|
||||||
|
CDB 32bit | Api | Api | N/A | Win32 | N/A
|
||||||
|
64bit | N/A | Win64 | Win64 | Api | Api
|
||||||
|
----------|-----------------|-----------------|-----------------|-----------------|----------------
|
||||||
|
GDB 32bit | Api | Api | N/A | Win32 | N/A
|
||||||
|
64bit | N/A | N/A | Win64 | N/A | Api
|
||||||
|
----------|-----------------|-----------------|-----------------|-----------------|----------------
|
||||||
|
|
||||||
|
*/
|
||||||
HANDLE inferior = NULL;
|
HANDLE inferior = NULL;
|
||||||
const DWORD rights = PROCESS_QUERY_INFORMATION | PROCESS_SET_INFORMATION | PROCESS_VM_OPERATION
|
do {
|
||||||
| PROCESS_VM_WRITE | PROCESS_VM_READ | PROCESS_DUP_HANDLE
|
const DWORD rights = PROCESS_QUERY_INFORMATION|PROCESS_SET_INFORMATION
|
||||||
| PROCESS_TERMINATE | PROCESS_CREATE_THREAD | PROCESS_SUSPEND_RESUME;
|
|PROCESS_VM_OPERATION|PROCESS_VM_WRITE|PROCESS_VM_READ
|
||||||
inferior = OpenProcess(rights, FALSE, pid);
|
|PROCESS_DUP_HANDLE|PROCESS_TERMINATE|PROCESS_CREATE_THREAD|PROCESS_SUSPEND_RESUME;
|
||||||
if (inferior == NULL) {
|
inferior = OpenProcess(rights, FALSE, pid);
|
||||||
appendMsgCannotInterrupt(
|
if (inferior == NULL) {
|
||||||
pid, Tr::tr("Cannot open process: %1") + winErrorMessage(GetLastError()));
|
appendMsgCannotInterrupt(pid, Tr::tr("Cannot open process: %1")
|
||||||
} else if (!DebugBreakProcess(inferior)) {
|
+ winErrorMessage(GetLastError()));
|
||||||
appendMsgCannotInterrupt(
|
break;
|
||||||
pid,
|
}
|
||||||
Tr::tr("DebugBreakProcess failed:") + QLatin1Char(' ')
|
bool creatorIs64Bit = is64BitWindowsBinary(
|
||||||
+ winErrorMessage(GetLastError()));
|
FilePath::fromUserInput(QCoreApplication::applicationFilePath()));
|
||||||
}
|
if (!is64BitSystem
|
||||||
|
|| si == NoSpecialInterrupt
|
||||||
|
|| (si == Win64Interrupt && creatorIs64Bit)
|
||||||
|
|| (si == Win32Interrupt && !creatorIs64Bit)) {
|
||||||
|
if (!DebugBreakProcess(inferior)) {
|
||||||
|
appendMsgCannotInterrupt(pid, Tr::tr("DebugBreakProcess failed:")
|
||||||
|
+ QLatin1Char(' ') + winErrorMessage(GetLastError()));
|
||||||
|
}
|
||||||
|
} else if (si == Win32Interrupt || si == Win64Interrupt) {
|
||||||
|
QString executable = QCoreApplication::applicationDirPath();
|
||||||
|
executable += si == Win32Interrupt
|
||||||
|
? QLatin1String("/win32interrupt.exe")
|
||||||
|
: QLatin1String("/win64interrupt.exe");
|
||||||
|
if (!QFileInfo::exists(executable)) {
|
||||||
|
appendMsgCannotInterrupt(pid,
|
||||||
|
Tr::tr("%1 does not exist. If you built %2 "
|
||||||
|
"yourself, check out https://code.qt.io/cgit/"
|
||||||
|
"qt-creator/binary-artifacts.git/.")
|
||||||
|
.arg(QDir::toNativeSeparators(executable),
|
||||||
|
QGuiApplication::applicationDisplayName()));
|
||||||
|
}
|
||||||
|
switch (QProcess::execute(executable, QStringList(QString::number(pid)))) {
|
||||||
|
case -2:
|
||||||
|
appendMsgCannotInterrupt(pid, Tr::tr(
|
||||||
|
"Cannot start %1. Check src\\tools\\win64interrupt\\win64interrupt.c "
|
||||||
|
"for more information.").arg(QDir::toNativeSeparators(executable)));
|
||||||
|
break;
|
||||||
|
case 0:
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
appendMsgCannotInterrupt(pid, QDir::toNativeSeparators(executable)
|
||||||
|
+ QLatin1Char(' ') + Tr::tr("could not break the process."));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} while (false);
|
||||||
if (inferior != NULL)
|
if (inferior != NULL)
|
||||||
CloseHandle(inferior);
|
CloseHandle(inferior);
|
||||||
#else
|
#else
|
||||||
|
@@ -1085,6 +1085,15 @@ void Project::configureAsExampleProject(Kit * /*kit*/)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Project::buildTarget(const QString &target)
|
||||||
|
{
|
||||||
|
if (!activeTarget() || !activeTarget()->activeBuildConfiguration()
|
||||||
|
|| !activeTarget()->activeBuildConfiguration()->buildSystem()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
activeTarget()->activeBuildConfiguration()->buildSystem()->buildNamedTarget(target);
|
||||||
|
}
|
||||||
|
|
||||||
bool Project::hasMakeInstallEquivalent() const
|
bool Project::hasMakeInstallEquivalent() const
|
||||||
{
|
{
|
||||||
return d->m_hasMakeInstallEquivalent;
|
return d->m_hasMakeInstallEquivalent;
|
||||||
|
@@ -131,6 +131,8 @@ public:
|
|||||||
bool needsBuildConfigurations() const;
|
bool needsBuildConfigurations() const;
|
||||||
virtual void configureAsExampleProject(ProjectExplorer::Kit *kit);
|
virtual void configureAsExampleProject(ProjectExplorer::Kit *kit);
|
||||||
|
|
||||||
|
void buildTarget(const QString &target);
|
||||||
|
|
||||||
virtual ProjectImporter *projectImporter() const;
|
virtual ProjectImporter *projectImporter() const;
|
||||||
|
|
||||||
virtual DeploymentKnowledge deploymentKnowledge() const { return DeploymentKnowledge::Bad; }
|
virtual DeploymentKnowledge deploymentKnowledge() const { return DeploymentKnowledge::Bad; }
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
add_qtc_plugin(QmlJSEditor
|
add_qtc_plugin(QmlJSEditor
|
||||||
DEPENDS LanguageUtils QmlJS QmlEditorWidgets CMakeProjectManager
|
DEPENDS LanguageUtils QmlJS QmlEditorWidgets
|
||||||
PLUGIN_DEPENDS Core ProjectExplorer QmlJSTools TextEditor LanguageClient
|
PLUGIN_DEPENDS Core ProjectExplorer QmlJSTools TextEditor LanguageClient
|
||||||
SOURCES
|
SOURCES
|
||||||
qmlexpressionundercursor.cpp qmlexpressionundercursor.h
|
qmlexpressionundercursor.cpp qmlexpressionundercursor.h
|
||||||
|
@@ -5,7 +5,6 @@
|
|||||||
#include "qmljseditorconstants.h"
|
#include "qmljseditorconstants.h"
|
||||||
#include "qmljseditorsettings.h"
|
#include "qmljseditorsettings.h"
|
||||||
|
|
||||||
#include <cmakeprojectmanager/targethelper.h>
|
|
||||||
#include <coreplugin/icore.h>
|
#include <coreplugin/icore.h>
|
||||||
#include <coreplugin/idocument.h>
|
#include <coreplugin/idocument.h>
|
||||||
#include <projectexplorer/project.h>
|
#include <projectexplorer/project.h>
|
||||||
@@ -120,11 +119,10 @@ void QmlTaskManager::updateSemanticMessagesNow()
|
|||||||
|
|
||||||
static void triggerQmllintCMakeTarget()
|
static void triggerQmllintCMakeTarget()
|
||||||
{
|
{
|
||||||
CMakeProjectManager::buildTarget(
|
if (ProjectManager::startupProject())
|
||||||
ProjectManager::startupProject()->projectFilePath(), Constants::QMLLINT_BUILD_TARGET);
|
ProjectManager::startupProject()->buildTarget(Constants::QMLLINT_BUILD_TARGET);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void QmlTaskManager::updateMessagesNow(bool updateSemantic)
|
void QmlTaskManager::updateMessagesNow(bool updateSemantic)
|
||||||
{
|
{
|
||||||
// heuristic: qmllint will output meaningful warnings if qmlls is enabled
|
// heuristic: qmllint will output meaningful warnings if qmlls is enabled
|
||||||
|
Submodule src/shared/qbs updated: 64e82d3855...f2906471ba
Reference in New Issue
Block a user